Rails API使用Devise-JWT:无需登出已认证账号能否创建新登录?
问题解答
这不是Devise/Devise-JWT的预期特性,大概率是Postman的请求配置错误,或者你的Rails代码里做了不合理的认证限制。
可能的原因及解决方法
Postman自动携带了旧的认证Token
登录接口(通常是POST /users/sign_in)应该是匿名可访问的,不需要携带任何Bearer Token。如果Postman的请求头里自动带上了账号A的Token,Devise会识别当前请求的用户是A,此时调用登录接口可能直接返回A的Token(而非重新验证账号B的密码)。
解决:在Postman中单独设置登录接口的认证方式为No Auth,确保请求头里没有Authorization: Bearer <A的Token>。自定义登录控制器误加了认证前置动作
如果你自定义了SessionsController,不要在create动作前添加before_action :authenticate_user!——这个前置动作会要求用户先认证才能访问登录接口,导致用账号B的密码请求时,系统只会识别已认证的A用户,返回A的Token。
解决:检查自定义控制器代码,确保create动作不需要前置认证。
关于多账号登录的可行性
默认情况下,Devise-JWT完全支持同时为多个账号生成有效Token,不需要登出已登录的账号。只要登录接口允许匿名访问,每次用不同的账号密码调用登录接口,都会返回对应账号的独立Token,这些Token之间互不影响,各自对应所属用户的身份。
内容的提问来源于stack exchange,提问作者setobiralo
相关产品推荐
相关产品推荐

