我正在开发Rails API并使用Devise进行身份验证。
当我在控制器中使用current_user
时,它总是返回nil
(好像没有登录用户),尽管用户已经登录。
为什么它在开发网站时起作用而在开发API时不起作用?
我使用curl命令来测试应用程序:
登录:
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
答案 0 :(得分:2)
您是否命名了任何控制器?
即:
我有:
namespace:api,默认值:{format :: json} do
devise_for :users, controllers: {
registrations: 'api/registrations',
sessions: 'api/sessions'
}
端
在我的routes.rb
中我想使用#current_user和#user_signed_in?设计所提供的方法,但不断变得“无”。和undefined_method错误
对命名空间进行了一些阅读,并意识到设计具有很多神奇的力量。由于我在api中命名了我的用户,因此生成了Devise:current_api_user& api_user_signed_in?我的方法。这些没有返回nil
您可以在此处详细了解: https://github.com/plataformatec/devise/blob/master/lib/devise/rails/routes.rb#L61