我的Rails 5应用程序有一个管理员,该管理员使用常规的devise登录过程。路由的作用域位于/admin
scope '/admin' do
devise_for :users, singular: :admin_user
end
此外,该应用程序还为移动设备提供了API。该API使用JWT令牌进行身份验证。 devise-jwt宝石用于此目的。
我将devise_for
方法的作用域设置在api / v1下,如下所示:
scope :api, module: :api do
scope :v1, module: :v1 do
devise_for :api_users,
class_name: 'User',
resource_name: 'user',
name: 'user',
path: '',
path_names: {
sign_in: 'login',
sign_out: 'logout',
registration: 'signup'
},
controllers: {
sessions: 'api/v1/sessions',
registrations: 'api/v1/registrations'
}
end
end
通过对api/v1/login
的JSON调用,我可以登录。不幸的是,可能由于resource_name
不匹配,JWT令牌未添加为标头。
当我将devise_for
资源参数从:api_users
更改为:users
并注释/admin
范围devise_for
时,它起作用了。
我希望有人可以找到解决该问题的方法。它已经困扰了我好几天,我想我已经尝试了路由文件中名称空间/范围/模块参数的所有可能映射和组合。