Я использую на клиенте библиотеку облаков angularjs-devise. Когда я пытаюсь войти/зарегистрироваться, я получаю ответ 200 ok с открытым пользовательским объектом, видимым в консоли chrome js. Обновление страницы, похоже, потеряет эту информацию, хотя я предположил, что служба сохранит ее в какой-то момент, так как она также имеет методы выхода из системы и currentUser. https://github.com/cloudspace/angular_devise
Мои вопросы:
1) Действительно ли эта служба хранит пользователя, и если да, то как (например, с помощью файлов cookie или localstorage или в памяти)?
2) Если служба не хранит пользователя, как я могу хранить эту информацию в пользовательском файле cookie/localstorage и, что еще важнее, установить пользователя в службу, чтобы можно было использовать методы "isauthenticated" и "currentuser"?
Инструкции по чтению частичной библиотеки
Просто зарегистрируйте Devify как зависимость для вашего модуля. Затем служба Auth будет доступна для использования.
angular.module('myModule', ['Devise']).
config(function(AuthProvider) {
// Configure Auth service with AuthProvider
}).
controller('myCtrl', function(Auth) {
// Use your configured Auth service.
});
Auth.login(creds): Используйте Auth.login() для аутентификации с сервером. Имейте в виду, учетные данные отправляются в открытом виде; используйте SSL-соединение для их защиты. creds - это объект, который должен содержать любые учетные данные, необходимые для аутентификации с сервером. Auth.login() вернет обещание, которое разрешит зарегистрированному пользователю. См. AuthProvider.parse() для анализа пользователя на полезный объект.
angular.module('myModule', ['Devise']).
controller('myCtrl', function(Auth) {
var credentials = {
email: '[email protected]',
password: 'password1'
};
Auth.login(credentials).then(function(user) {
console.log(user); // => {id: 1, ect: '...'}
}, function(error) {
// Authentication failed...
});
});
Мой частичный код:
main.js
var myApp = angular.module('mail_app', ['ngRoute', 'ngResource', 'Devise']);
myApp.config(function($routeProvider, $locationProvider, $httpProvider, AuthProvider) {
console.log("in router")
$locationProvider.html5Mode(true);
$httpProvider.defaults.headers.common['X-CSRF-Token'] =
$('meta[name=csrf-token]').attr('content');
$httpProvider.defaults.headers.common['ClientType'] = 'browser';
// Customise login
AuthProvider.loginMethod('POST');
AuthProvider.loginPath('/api/v1/users/login.json');
// Customise register
AuthProvider.registerMethod('POST');
AuthProvider.registerPath('/api/v1/users.json');
});
SessionsController.js
myApp.controller('SessionsController', ['$scope', 'Auth', '$http', function($scope, Auth, $http) {
console.log("in session controller")
console.log(Auth.isAuthenticated());
$scope.loginUser = function() {
console.log("in login")
var credentials = {
email: $scope.email,
password: $scope.password
};
Auth.login(credentials).then(function(user) {
$scope.authError = 'Success!';
console.log(user); // => {id: 1, ect: '...'}
Auth.currentUser = user;
}, function(error) {
$scope.authError = 'Authentication failed...';
});
};
$scope.registerUser = function(){
console.log("in register function")
var ncredentials = {
email: $scope.newEmail,
password: $scope.newPassword,
password_confirmation: $scope.newPasswordConfirmation
};
Auth.register(ncredentials).then(function(registeredUser) {
console.log(registeredUser); // => {id: 1, ect: '...'};
}, function(error) {
$scope.authError = 'Registration failed...';
});
};
$scope.getCurrentUser = function(){
Auth.currentUser().then(function(user) {
// User was logged in, or Devise returned
// previously authenticated session.
console.log(user); // => {id: 1, ect: '...'}
$scope.id = user.id;
}, function(error) {
// unauthenticated error
});
};
$scope.isUserAuthenticated = function(){
Auth.isAuthenticated();
};
}]);