Что я хочу делать, когда пользователь приходит на страницу index.html Мне нужен модуль входа в систему, чтобы сделать 2 вещи:
-
Мне нужно это, чтобы проверить, прошел ли аутентификация пользователя (что, я думаю, я уже начал с "function authService" ), если у пользователя есть действительный токен, затем измените ui-view на dashboard/dashboard.html и если ключ недействителен или вообще нет ключа, загрузите login/login.html в ui-view.
-
Как только они успешно вошли в систему, я хочу, чтобы они были перенаправлены на "dashboard/dashboard.html"
Вот мой логин script:
function authInterceptor(API) {
return {
request: function(config) {
if(config.url.indexOf(API) === 0) {
request.headers = request.headers || {};
request.headers['X-PCC-API-TOKEN'] = localStorage.getItem('token');
}
return config;
}
}
}
function authService(auth) {
var self = this;
self.isAuthed = function() {
localStorage.getItem('token');
}
}
function userService($http, API) {
$http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;';
$http.defaults.transformRequest = [function(data) {
return angular.isObject(data) && String(data) !== '[object File]' ? param(data) : data;
}];
var self = this;
self.login = function(username, pwd, ctrl) {
ctrl.requestdata = API + '/winauth' + '; with ' + username;
return $http.post(API + '/winauth', {
username: username,
pwd: pwd
})
};
var param = function(obj) {
var query = '', name, value, fullSubName, subName, subValue, innerObj, i;
for(name in obj) {
value = obj[name];
if(value instanceof Array) {
for(i=0; i<value.length; ++i) {
subValue = value[i];
fullSubName = name + '[' + i + ']';
innerObj = {};
innerObj[fullSubName] = subValue;
query += param(innerObj) + '&';
}
}
else if(value instanceof Object) {
for(subName in value) {
subValue = value[subName];
fullSubName = name + '[' + subName + ']';
innerObj = {};
innerObj[fullSubName] = subValue;
query += param(innerObj) + '&';
}
}
else if(value !== undefined && value !== null)
query += encodeURIComponent(name) + '=' + encodeURIComponent(value) + '&';
}
return query.length ? query.substr(0, query.length - 1) : query;
};
}
function LoginCtrl(user) {
var self = this;
function handleRequest(res) {
self.responsedata = res;
self.message = res.data.message;
var authToken = res.data.auth_token;
localStorage.setItem('token', authToken);
}
self.login = function() {
this.requestdata = 'Starting request...';
user.login(self.username, self.pwd, self)
.then(handleRequest, handleRequest)
}
}
// Login Module
var login = angular.module('login', ["ui.router"])
login.factory('authInterceptor', authInterceptor)
login.service('user', userService)
login.service('auth', authService)
login.constant('API', 'http://myserver.com/api')
EDIT - Я добавил это в свой контроллер входа, чтобы указать маршруты входа
login.config(function($httpProvider, $stateProvider, $urlRouterProvider) {
$httpProvider.interceptors.push('authInterceptor');
$urlRouterProvider.otherwise('/login');
$stateProvider
// HOME STATES AND NESTED VIEWS ========================================
.state('login', {
url: '/login',
templateUrl: 'login/login.html',
controller: "mainLogin",
controllerAs: "log"
})
// nested list with just some random string data
.state('dashboard', {
url: '/dashboard',
templateUrl: 'dashboard/dashboard.html',
})
})
login.controller('mainLogin', LoginCtrl)
Вот мой index.html:
EDIT - Я удалил "ng-include" и добавил "ng-view" для управления маршрутами.
<body ng-app="login" ng-controller="mainLogin as log" class="loginPage">
<div class="main" ui-view></div>
</body>
Как вы можете видеть, у меня есть функция, которая проверяет токен в локальном хранилище пользователей:
function authService(auth) {
var self = this;
self.isAuthed = function() {
localStorage.getItem('token');
}
}
И я загружаю его в модуль как услугу:
login.service('auth', authService)
Вот где я застрял. Я не знаю, куда идти отсюда. Я даже не знаю, правильно ли использую функцию authService. Я все еще многому учусь об AngularJS, поэтому мне легко застрять.:)
Еще одна вещь, которую вы заметите, - это мой файл index.html. Я просто по умолчанию загружаю "login/login.html". Мне нужно загрузить либо login.html, либо dashboard.html в зависимости от того, вошли ли они в систему или нет. А затем также проведите их до dashboard.html, как только они успешно войдут в систему.
script отлично работает, ударяя API аутентификации, аутентифицируя пользователя, а затем сохраняя действительный ключ авторизации в своем локальном хранилище.
Кто-нибудь знает, как я могу это сделать?