Sails.js:如何在用户注册后使用sails-generate-auth返回访问令牌?

时间:2015-04-21 11:30:02

标签: node.js authentication sails.js passport.js

我在我的sails.js应用中使用sails-generate-auth。我按照this教程将其与我的应用程序集成。当我致电localhost:1337/auth/local/register时,它会路由callback中的AuthController行为。我的回调操作如下

callback: function (req, res) {
        function tryAgain(err) {
                //some validation
                }
        }

passport.callback(req, res, function (err, user, challenges, statuses) {
            if (err || !user) {
                return tryAgain(challenges);
            }

            req.login(user, function (err) {
                if (err) {
                    return tryAgain(err);
                }

                //Return the access token created by passport instead of success.
                res.send("Success");
            });
        });

我想将res.send("Success");替换为护照创建的access token。但是User.passport此时似乎是空的。如何在此时获得用户的access token

2 个答案:

答案 0 :(得分:3)

您获得的用户仅包含来自“用户收藏”的数据。其中包含用户名电子邮件和ID。护照' collection是一个单独的集合,包含散列密码,ID,userID(等于' User' Collection中的ID)和一个令牌。您需要在护照中搜索'相关用户的集合。这是algoritem:

passport.callback(req, res, function (err, user, challenges, statuses) {
  if (err || !user) {
    console.log(err);
    return tryAgain(challenges);
  }

  req.login(user, function (err) {
    if (err) {
      console.log(err);
      return tryAgain(err);
    }

    // Mark the session as authenticated to work with default Sails sessionAuth.js policy
    req.session.authenticated = true

    console.log(user);
    var userID = user.id;
    Passport.find({user: userID}, function(err, items){
        if(err) return err;

        console.log(items[0].accessToken);
        // Make sure you dont give them any sensetive data
        res.json({userData: user, token: items[0].accessToken});
    });
    // Upon successful login, send the user to the homepage were req.user
    //res.redirect('/');
  });
});

答案 1 :(得分:0)

如果你想使用sails内置会话,你不需要向客户端发送任何令牌,一切都在服务器端存储在会话中,并且由sid绑定到用户(会话ID)cookie,因此您可以重定向到任何页面。

只要您拥有sessionAuth政策,就会在访问受保护路线之前检查用户是否已登录。

如果你想使用像Json Web Tokens(JWT)这样的东西,sails-generate-auth / sails-auth do not support it yet