J'ai vu quelques questions à ce sujet, mais étant nouveau pour Angular et Node, j'ai du mal à trouver une solution appropriée.

J'avais ce code, qui fonctionnait pour la connexion et je ne pouvais accéder à mes pages qu'après m'être authentifié:

router.post('/login',
    passport.authenticate('local',
            {
                successRedirect: '/',
                failureRedirect: '/login',
                failureFlash: false,
                successFlash: false
            }
    ));

router.all('*', ensureAuthenticated);

function ensureAuthenticated(req, res, next) {
    console.log("in ensureAuth", req.isAuthenticated());
    console.log("session data", req.session);
    console.log("user data", req.user);
    if (req.isAuthenticated())
    {
        return next();
    }
    res.redirect('/login');
}

L'authentification du passeport local que j'ai retourne un objet après avoir vérifié si l'utilisateur existe et autorise la connexion, en tant que telle:

return passportDone(null, result.rows[0]);

Avec result.rows [0] étant les informations utilisateur que je veux.

Ce que j'avais à l'avant est un simple ng-submit sous la forme qui appelle la "connexion (informations d'identification)" avec les informations d'identification définies par ng-model dans leurs champs respectifs (nom d'utilisateur et mot de passe).

Ma question est de savoir comment puis-je renvoyer toutes les informations que je veux, telles que user_role, nom et autres, afin que je puisse les présenter dans le front-end en tant que {{user.name}} par exemple?

Les informations doivent rester après les rafraîchissements, donc $ scope n'est pas une option de ce que j'ai lu.

0
Forget 9 mars 2016 à 16:15

3 réponses

Meilleure réponse

Ce que vous voulez probablement faire ici, c'est créer un itinéraire personnalisé pour récupérer ces informations. par exemple: "/ moi".

Dans cet itinéraire, vous pouvez servir les informations que vous stockez probablement dans votre variable de session.

Une autre solution, selon le fonctionnement de votre application avec l'authentification, consiste à injecter les informations utilisateur (par exemple, si vous vous connectez et êtes redirigé vers une nouvelle page, vous pouvez injecter les informations utilisateur dans la nouvelle page en tant que variable js) ou renvoyer le userinfo dans la réponse si vous envoyez une demande ajax pour vous connecter et que vous n'êtes pas redirigé vers une nouvelle page par le serveur.

1
Stian 9 mars 2016 à 13:44

J'espère que vous utilisez l'authentification locale passport.js. Je recommanderais de stocker les informations utilisateur après l'authentification dans les cookies en tant que jeton web json ou en utilisant un autre chiffrement. Et vous devriez exposer une api (/ api / is-authenticated) qui est utilisé pour vérifier si l'utilisateur est authentifié, en envoyant le jeton stocké dans les cookies.Lorsque vous actualisez ou naviguez vers d'autres routes, effectuez un appel api (/ api / is-authenticated) pour vérifier si cet utilisateur particulier s'est déjà authentifié ou non.

0
Devendiran Kumar 9 mars 2016 à 14:52

OK j'ai compris.

J'avais déjà le service et tout, mais le problème était avec la redirection du passeport réussie. Il renvoie le code HTML que vous souhaitez quand il réussit, ce qui est bien. Cependant, comme je voulais les informations utilisateur, cela ne suffisait pas. Ce que j'ai fait, c'est créer une route / account qui retourne les informations de req.user, que je gère ensuite dans le frontal et forme un cookie avec. Ce qui se passe essentiellement est:

Post_login-> verify_user-> success-> get_account-> form_cookie-> render_html

0
Forget 10 mars 2016 à 16:14