如何在sails.js SPA上处理多个身份验证策略?

时间:2015-04-20 16:01:02

标签: authentication architecture sails.js single-page-application passport.js

如何在sails.js SPA上处理多个身份验证策略?

我正在为前端构建一个基于Angular的单页面应用程序,为后端构建sailsjs。现在我正在使用sails-auth(内部使用passportjs)将我的身份验证逻辑绑定到我的用户模型。

我在我的前端安装了多个护照提供商,例如passport-githubpassport-facebook,还有经典的passport-local,以便用户也可以注册并登录用户名和&密码。

我希望我的客户(单页应用程序,以及将来的其他人)在auth之后使用令牌而不是cookie /会话,以便更容易扩展,跨域请求也将更容易。它还将使移动集成变得更加容易。

我知道我必须为OAuth提供程序使用回调,这是我的目标:

enter image description here

我知道我可以用sessionAuth策略替换我的sail-auth的tokenAuth策略,该策略可以从标题中读取令牌并查询Tokens模型,但是我的问题是:

  • 使用用户名/密码登录时,可以通过简单的AJAX调用进行请求,因此很容易将令牌传递回SPA。当使用github等提供程序时,在调用回调时,我是否应该将令牌动态地嵌入到我正在服务的HTML中?
  • sail-auth的policies/passport.js显示默认情况下它依赖于内置会话来持久登录/序列化和反序列化userID。如何将其与sails内置会话分离,以便为用户生成令牌并使用嵌入的令牌回送我的索引?

提前谢谢!

2 个答案:

答案 0 :(得分:1)

在身份验证路线上,您可以在后端(without session)进行基于passport.js的身份验证,使用tokenAuth的令牌并将令牌转发给用户。

然后,对于安全路线,您可以在政策中放置verifyToken来电(截取每条路线)。

免责声明:我自己还没试过。

答案 1 :(得分:0)

我一直在使用这些步骤。

第1步(全局):$ npm install -g sails

第2步(应用程序):$ sails new myApp

步骤3(文件):将https://github.com/carlospliego/sails-token-auth-setup中的每个文件复制到相应的文件夹

步骤3A要使另一个身份验证策略只在app / policies /目录中添加另一个文件

这是一个可能是什么样子的例子

 module.exports = function hasValidProductApiToken(req, res, next) {
      if(someCondition){
         next(); // Call next to continue
      }

 };

步骤4(策略):将此代码添加到config / policies.js

 '*': "hasToken",
 UserController: {
    "create": true
 },
 AuthController: {
    '*': true
 }

步骤5:更改config / tokenSecret.js的值

第6步:(依赖关系)

  • npm install --save passport
  • npm install --save passport-local
  • npm install --save bcrypt-nodejs
  • npm install --save jsonwebtoken
  • npm install --save express-jwt

您的终端将如下所示:

  • POST / GET / PUT / DELETE user /
  • POST auth / login
  • DELETE auth / logout

以下是有关如何在风帆中创建基于令牌的身份验证的精彩指南:https://github.com/carlospliego/sails-token-auth-setup