Rails : API - 设计 : current_user return nil 即使已登录
Rails : API - Devise : current_user return nil even if signed in
我正在开发 Rails API 并使用 Devise 进行身份验证。
我正在通过 curl 命令测试登录和退出。
问题是 current_user 在其他控制器中总是 returns 零,即使我已登录(通过使用 curl 命令)也是如此。
卷曲命令:
Sign in :
curl -v -H 'Content-Type: application/json' -H 'Accept: application/json' -X POST http://localhost:3000/api/v1/sessions -d "{\"user\":{\"email\":\"user1@example.com\",\"password\":\"secret123\"}}"
注销:
curl -v -H 'Content-Type: application/json' -H 'Accept: application/json' -X DELETE http://localhost:3000/api/v1/sessions/\?auth_token\=JRYodzXgrLsk157ioYHf
我认为你的做法不正确。 Devise 的 current_user
方法依赖于保存在浏览器中的 cookie 来指示用户是否已登录。
我建议您使用另一种方法,比如为每个用户生成一个令牌并将其与每个请求一起发送。您可以创建一个身份验证端点,该端点接受用户电子邮件和密码,并在凭据有效的情况下生成特定于该用户的令牌。然后在所有需要用户登录的请求中,您应该将此令牌与任何其他参数一起发送。
对于这个的简单实现,您可以检查#352 Securing an API - Railscasts(有点旧但仍然有效)。
或者为了更安全的解决方案,您可以查看Doorkeeper gem。
我正在开发 Rails API 并使用 Devise 进行身份验证。 我正在通过 curl 命令测试登录和退出。
问题是 current_user 在其他控制器中总是 returns 零,即使我已登录(通过使用 curl 命令)也是如此。
卷曲命令:
Sign in :
curl -v -H 'Content-Type: application/json' -H 'Accept: application/json' -X POST http://localhost:3000/api/v1/sessions -d "{\"user\":{\"email\":\"user1@example.com\",\"password\":\"secret123\"}}"
注销: curl -v -H 'Content-Type: application/json' -H 'Accept: application/json' -X DELETE http://localhost:3000/api/v1/sessions/\?auth_token\=JRYodzXgrLsk157ioYHf
我认为你的做法不正确。 Devise 的 current_user
方法依赖于保存在浏览器中的 cookie 来指示用户是否已登录。
我建议您使用另一种方法,比如为每个用户生成一个令牌并将其与每个请求一起发送。您可以创建一个身份验证端点,该端点接受用户电子邮件和密码,并在凭据有效的情况下生成特定于该用户的令牌。然后在所有需要用户登录的请求中,您应该将此令牌与任何其他参数一起发送。
对于这个的简单实现,您可以检查#352 Securing an API - Railscasts(有点旧但仍然有效)。
或者为了更安全的解决方案,您可以查看Doorkeeper gem。