设置了一个简单的设计rails应用程序:
:database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable, :confirmable
我在两个浏览器中或在同一浏览器和隐身模式下看到了不同的结果。
我注册正常,它会立即登录我,如果我退出并再次尝试登录,我会找到消息Failed to Login
,它来自哪里?我可以调试或检查更多吗?
在Chrome中使用隐身模式或使用其他浏览器几乎可以立即登录,而不会看到登录失败的消息。
我几乎不会在开发模式下复制它,但在Heroku上它不断发生。
甚至开始调试的线索?
答案 0 :(得分:0)
我遇到了这个错误,这是我的发现和解决方案,以防日后对他人有帮助。
Failed to Login
消息实际上来自Warden,后者包装在Devise中。 https://github.com/wardencommunity/warden/blob/5b3cbd5bef67cbe399bb7007537bc4841bbee772/lib/warden/strategies/base.rb#L136
因此,随着设计的进行,将列出测试身份验证的策略列表,如果其中任何一个调用strategy.fail!
,该过程将停止,并且故障消息将沿着链条传递至设备,以显示在设备中。即时消息。在这种情况下,这就是您看到的消息。
对我来说,这是因为我的JWT令牌无法解码,并且我处理JWT令牌的自定义设计策略是在没有自定义错误消息的情况下营救并调用fail!
。这种方法看起来更安全一些,因为它会传递一条更有用的消息:https://medium.com/@lukerollans/implementing-jwt-authentication-as-a-custom-devise-strategy-54948bddb134
因此,我想您的设计策略之一就是在此过程中的某个位置调用fail
或fail!
。祝你好运!