Sto utilizzando la libreria cloudscape angularjs-devise sul client. Quando provo ad accedere/registrare ottengo una risposta di 200 ok con l'oggetto utente semplice visibile nella console chrome js. L'aggiornamento della pagina sembra perdere queste informazioni anche se ho assunto che il servizio lo memorizzasse ad un certo punto poiché ha anche i metodi di logout e currentUser. https://github.com/cloudspace/angular_deviseCome posso memorizzare e impostare l'utente su questo servizio di autenticazione della libreria di angularjs devise? O è già stato fatto?
Le mie domande sono:
1) È questo il servizio effettivamente memorizzare l'utente e se sì, come (vale a dire con i biscotti o localStorage o in memoria)?
2) Se il servizio non memorizza l'utente come posso memorizzare queste informazioni in un cookie personalizzato/localstorage e, più importante, impostare l'utente nel servizio in modo che i metodi "autenticati" e "currentuser" possano essere utilizzati ?
parziali Istruzioni Biblioteca Leggimi
Basta registrarsi Devise come una dipendenza per il modulo. Quindi, il servizio Auth sarà disponibile per l'uso.
angular.module('myModule', ['Devise']).
config(function(AuthProvider) {
// Configure Auth service with AuthProvider
}).
controller('myCtrl', function(Auth) {
// Use your configured Auth service.
});
Auth.login (creds): utilizzare Auth.login() per l'autenticazione con il server. Tieni presente che le credenziali vengono inviate in testo normale; utilizzare una connessione SSL per proteggerli. creds è un oggetto che dovrebbe contenere tutte le credenziali necessarie per l'autenticazione con il server. Auth.login() restituirà una promessa che verrà risolta all'utente connesso. Vedere AuthProvider.parse() per analizzare l'utente in un oggetto utilizzabile.
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...
});
});
mio codice parziale:
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();
};
}]);
La mia ipotesi migliore è che è necessario utilizzare il remember_me su devise in modo che crei un cookie permanente anziché uno di sessione. –
Qualche idea su come farlo attraverso l'api? Di solito invio una richiesta POST con i dati dell'utente a "/users/sign_in.json". Quali informazioni posso aggiungere alla richiesta per remember_me? –