J'utilise la bibliothèque cloudspace angularjs-imagine sur le client. Lorsque j'essaie de me connecter/enregistrer, je reçois une réponse de 200 ok avec l'objet utilisateur brut visible dans la console js chrome. L'actualisation de la page semble perdre cette information même si j'ai supposé que le service stockerait cela à un moment donné, car il possède également des méthodes de déconnexion et currentUser. https://github.com/cloudspace/angular_deviseComment puis-je stocker et définir l'utilisateur sur ce service d'authentification de bibliothèque angularjs imagine? Ou est-ce déjà fait?
Mes questions sont les suivantes:
1) Est-ce service de stockage en fait l'utilisateur et si oui, comment (à savoir avec les cookies ou localStorage ou en mémoire)? 2) Si le service ne stocke pas l'utilisateur, comment puis-je stocker ces informations dans un cookie/localstorage personnalisé et, plus important encore, définir l'utilisateur dans le service afin que les méthodes "isauthenticated" et "currentuser" puissent être utilisées ?
Instructions Bibliothèque partielle Readme
enregistrer juste en tant que dépendance Concevoir pour votre module. Ensuite, le service Auth sera disponible pour utilisation. Auth.login (creds): Auth.login() pour s'authentifier auprès du serveur. Auth.login (creds): Auth.login(): Authentification avec le serveur. Gardez à l'esprit que les informations d'identification sont envoyées en clair; utilisez une connexion SSL pour les sécuriser. creds est un objet qui doit contenir toutes les informations d'identification nécessaires pour s'authentifier auprès du serveur. Auth.login() renverra une promesse qui sera résolue à l'utilisateur connecté. Voir AuthProvider.parse() pour analyser l'utilisateur dans un objet utilisable.
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...
});
});
Mon code partiel:
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();
};
}]);
Ma meilleure estimation est que vous devez utiliser le remember_me sur afin de créer un cookie permanent au lieu d'un cookie de session. –
Une idée de comment faire cela à travers l'API? J'envoie généralement une requête POST avec les données utilisateur à '/users/sign_in.json'. Quelles informations puis-je ajouter à la demande de remember_me? –