0

背景

大约 6 个月前,我开始使用 Sails 开发 Web 应用程序。我希望使用sails-authorsails-generate-auth和轻松实现身份验证和权限sails-permissions。6 个月后,我意识到这些模块不再得到很好的维护。我决定使用Waterlock.

问题

我是NodeJS、Express 和 Sails的新手。来自Rails,我有偏见。我需要被牵手...

我能够正确安装Waterlock,并且能够使用 API。

1.登录

发布http://localhost:1337/auth/login

通过emailpassword进入form-data(见下面的截图):

返回(在邮递员中):

{
  "auth": {
    "password": "$2a$10$5swWYJLZ.KbKWA9.8Hg8eOr.8HiCBiddWDyHyGSB3y7bluJZwvjDS",
    "email": "my.email@mydomain.com",
    "createdAt": "2016-10-04T13:01:17.594Z",
    "updatedAt": "2016-10-04T13:01:17.607Z",
    "id": 12,
    "user": 13
  },
  "createdAt": "2016-10-04T13:01:17.603Z",
  "updatedAt": "2016-10-04T13:01:17.603Z",
  "id": 13
}

我猜我的用户是与他的加密密码一起创建和存储的。

在此处输入图像描述

接下来我尝试实现 UI(这就是我需要指导的地方):

UserController.js

'new': function(req, res) {
    res.view();
},

user/new.ejs

<h1>Sign up</h1>
<form action="/auth/login" method='POST'>
    <input type='text' placeholder='me@mydomain.com' name='email'>
    <input type='password' placeholder='password' name='password'>
    <input type='submit' value="Create account">
</form>

问题 1:创建/登录用户 ieauth/login后,如何重定向到另一个 URL?例如,刚刚创建的用户的 /user/show/:id id

我尝试添加login操作 the AuthController,但这只是覆盖了实际有用的操作。

更新:我发现waterlock.js有 Post 操作挂钩,但仍然不知道如何重定向到/user/show/:id刚刚创建或登录的用户。

问题2:我不应该删除"password": "$2a$10$...ZwvjDS",退回的吗?

2.智威汤逊

好的,JSON Web 令牌。所以我通过了身份验证,接下来我创建了一个 JWT,我可以在下一个请求的标头中传递它。

与邮递员

发布http://localhost:1337/user/jwt

{
  "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiIxM3x1bmRlZmluZWQiLCJzdWIiOiJzdWJqZWN0IiwiYXVkIjoiYXBwIG5hbWUiLCJleHAiOjE0NzYxOTIxNDc3OTgsIm5iZiI6MTQ3NTU4NzM0Nzc5OCwiaWF0IjoxNDc1NTg3MzQ3Nzk4LCJqdGkiOiI5ODgyYWY2MC04YTM1LTExZTYtODI0Yy1mNTZhYWE0MDhiZmIifQ.GYT4f49ggW8VwaEqTy0JskX6nHWZUMvM0A92KD1EC4I",
  "expires": 1476192147798
}

问题 3:我已通过身份验证,会话是否已创建?为什么我需要 JWT?比它sessionAuth好吗?

实际上在这里找到了我的答案

问题4:登录后,我需要POST http://localhost:1337/user/jwt获得一个JWT。我应该如何在 Sails 中实现它?

3. 我如何使用我的access_token

问题 5:我在哪里存储access_token并在下一个请求中使用它?(Sails 的最佳实践)

4

1 回答 1

1

广告。2)当然可以。客户不应该访问他的加密密码

广告。4) JWT 应该在服务中,没有控制器,因为是更安全的方式。所以,是的。它应该在服务器端完成,客户端不应访问 JWT 逻辑。

广告。5)随心所欲。恕我直言标题是最好的地方。

于 2016-10-06T08:19:14.250 回答