此Rails项目有一个API端,用于将数据发送到iOS版本的应用程序。它使用Devise :: Lockable在登录失败3次时锁定用户帐户。
这是一个奇怪的边缘情况,但可能不是那么罕见:情况开始于已经登录到桌面版本。如果我失败登录iOS应用程序 < / em> 3次,但然后点击我的电子邮件中的重置密码链接来自桌面版,因为我已经登录,edit_password_url的请求未经授权(因为该帐户被锁定)然后我被重定向到登录页面。
在保留params(特别是密码重置令牌)的同时,还有什么办法让它仍然可以转到edit_password_url?我在想:
答案 0 :(得分:1)
如果有活动会话,那么设计中会有多个操作重定向。我从不喜欢这种行为,通常会覆盖它。如果我点击链接,那就是因为我想要执行该操作。
例如,访问登录链接时,您可能希望以其他用户身份登录,因此您可以覆盖该操作以退出是否直接点击,而不是重定向。因此,对于我的示例,您将继承Devise::SessionsController
class SessionsController < Devise::SessionsController
skip_before_filter :require_no_authentication, only: [:new]
def new
if warden.authenticated?(resource_name)
sign_out
end
super
end
private
def sign_out
# From Devise::SessionsController#destroy
Devise.sign_out_all_scopes ? sign_out : sign_out(resource_name)
end
end
并在路线中覆盖它:
devise_for :users, controllers: {sessions: 'sessions'}