我正在使用Rails API,该API将通过jwt进行身份验证,并且希望用户帐户可恢复。据推测,在通过电子邮件接收到重置令牌之后,用户将向https://example.com/users/password
提供新密码和带有PUT的令牌,由/app/controllers/users/passwords_controller#update
处理。目前,我已经在passwords_controller.rb
中获得了这个功能(主要是在默认的Devise代码中):
# PUT /resource/password
def update
# {"user": {"password": "secret", "password_confirmation": "secret", "reset_password_token": "token_goes_here"}}
self.resource = resource_class.reset_password_by_token(resource_params) # problem here (line 33)...
yield resource if block_given?
if resource.errors.empty?
resource.unlock_access! if unlockable?(resource)
if Devise.sign_in_after_reset_password
resource.after_database_authentication
auth_options = {user: {login: resource.username, password: params['user']['password']}}
warden.authenticate!(auth_options)
render json: {success: true, jwt: current_token, response: "Authentication successful" }
else
render json: {success: false, response: "Authentication failed" }
end
else
set_minimum_password_length
respond_with resource
end
end
问题是reset_password_by_token
正在请求授权:
app/controllers/users/passwords_controller.rb:33:in `update'
Completed 401 Unauthorized in 220ms (ActiveRecord: 60.8ms | Allocations: 6810)
这对我来说似乎很奇怪,因为我希望用户能够使用令牌(除非过期)登录一次以进行密码更改。此时,我想返回jwt(因此使用warden.authenticate
),以便前端应用程序可以立即使用它来登录用户。
有人可以在这里向我指出正确的方向吗?
答案 0 :(得分:0)
从概念上讲,使用Rails作为API提供程序时,重置密码功能的流程如下:
password
和password_confirmation
对 PUT / auth / password 进行API调用,以设置新密码。