2017-05-02 2 views
0

J'utilise actuellement sean.js sur un projet. Tout semble bien, mais j'ai un problème avec le processus d'inscription. J'ai récemment mis en place une politique de back-end sur mes routes pour donner des autorisations à mes utilisateurs en fonction de leur rôle, quelque chose comme ceci:SEAN.js autologin après l'inscription et req.user.roles

exports.invokeRolesPolicies = function() { 
    acl.allow([{ 
    roles: ['myRole'], 
    allows: [{ 
     resources: '/some-route', 
     permissions: '*' 
    }] 
    }]); 
}; 

exports.isAllowed = function (req, res, next) { 
    var roles = (req.user) ? req.user.roles : ['guest']; 

    // If an person is being processed and the current user created it then allow any manipulation 
    if (req.people && req.user && req.people.user && req.people.user.id === req.user.id) { 
    return next(); 
    } 

    // Check for user roles 
    acl.areAnyRolesAllowed(roles, req.route.path, req.method.toLowerCase(), function (err, isAllowed) { 
    if (err) { 
     // An authorization error occurred 
     return res.status(500).send('Unexpected authorization error'); 
    } else { 
     if (isAllowed) { 
     // Access granted! Invoke next middleware 
     return next(); 
     } else { 
     return res.status(403).json({ 
      message: 'User is not authorized' 
     }); 
     } 
    } 
    }); 
}; 

J'ai utilisé le modèle qui est livré avec une SEAN qu'il utilise ACL pour définir les autorisations. Cette méthode fonctionne correctement lorsque vous vous connectez avec votre utilisateur. Le problème est que lorsque je crée un nouvel utilisateur à partir du formulaire d'inscription, il se connecte automatiquement sur le système mais ne reçoit pas les rôles et le fichier req.user.roles est nul. J'ai un processus quand après l'inscription l'utilisateur doit finir un autre formulaire pour tout définir, mais en raison du problème de rôle, la politique ne reconnaît pas le rôle et donne un rôle "invité" provoquant que je ne peux pas accéder à mes itinéraires . Si je me déconnecte après la connexion automatique de l'inscription, tout fonctionne correctement parce que les rôles sont réglés correctement.

Dois-je définir autre chose sur le serveur redis et comment? Ou que dois-je faire?

Répondre

0

Eh bien après une longue recherche, je trouve comment résoudre ce problème. Il s'ensuit qu'il me manquait une ligne de code sur mon contrôleur d'inscription. Je dois te connecter le req.user droit après avoir sauvegardé l'utilisateur comme ceci:

user.save().then(function() { 
    req.login(user, function(err) { 
     if (err) 
     res.status(400).send({ 
      message: errorHandler.getErrorMessage(err) 
     }); 
     res.json(user); 
    }); 
    }).catch(function(err) { 

La deuxième ligne est que je manque.

J'espère que cela aidera quelqu'un d'autre dans le futur.