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

Posted

技术标签:

【中文标题】Sails.js:用户注册后如何使用sails-generate-auth返回访问令牌?【英文标题】:Sails.js : How to return access token after user registration using sails-generate-auth? 【发布时间】:2015-06-28 12:58:49 【问题描述】:

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

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");
            );
        );

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

【问题讨论】:

【参考方案1】:

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

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('/');
  );
);

【讨论】:

如果我想重定向到另一个视图并发送令牌怎么办?【参考方案2】:

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

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

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

【讨论】:

以上是关于Sails.js:用户注册后如何使用sails-generate-auth返回访问令牌?的主要内容,如果未能解决你的问题,请参考以下文章

Sails.js 1.0:如何在没有Waterline的情况下连接和使用旧版MySQL数据库?

如何在sails.js 模型中添加具有整数数据类型数组的属性?

如何在sails.js 中创建动态策略

Sails.js + Passport.js 获取当前登录用户

如何使用 Passport 对 Sails JS 应用程序进行身份验证? [复制]

passport.js 使用sails.js 验证弹出窗口