gpt4 book ai didi

ruby-on-rails - Devise Warden 401凭据错误时未经授权

转载 作者:行者123 更新时间:2023-12-04 03:44:52 25 4
gpt4 key购买 nike

我有一个相当标准的Devise登录过程,其中:

看法:

resource_name,:url => session_path(resource_name))做| f | %>

<%= f.input :password, input_html: {class: "span6"} %>

<% if devise_mapping.rememberable? -%>
<p><%= f.check_box :remember_me %>&nbsp;&nbsp;&nbsp;Remember me</p>
<% end -%>

<input type="hidden" name="after_sign_in_page" value="<%=@after_sign_in_page%>">
<p><%= f.submit "Sign in", class: "btn btn-success" %></p>

我刚刚创建了一个sessioncontroller来简化电子邮件的大小写:
class SessionsController < Devise::SessionsController

def create
params[:user][:email].downcase!
super
logger.debug "Errors: #{resource.errors}"
end

具有良好凭据的登录会很好。

如果使用错误的凭据,它将使用以下日志重定向到登录页面:
Started POST "/users/sign_in" for 127.0.0.1 at 2013-01-10 09:59:44 +0100
Processing by SessionsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"8eytQkr20JOOOdDvpCWakbmUzNoaHMxK9/BSEVxETik=", "user"=>{"email"=>"nicolas@demoreau.be", "password"=>"[FILTERED]", "remember_me"=>"0"}, "after_sign_in_page"=>"", "commit"=>"Sign in"}
Time zone: (GMT+00:00) UTC, current area: , user to register: , current controller: sessions
Completed 401 Unauthorized in 69ms
Processing by SessionsController#new as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"8eytQkr20JOOOdDvpCWakbmUzNoaHMxK9/BSEVxETik=", "user"=>{"email"=>"nicolas@demoreau.be", "password"=>"[FILTERED]", "remember_me"=>"0"}, "after_sign_in_page"=>"", "commit"=>"Sign in"}
Rendered devise/sessions/_new.html.erb (17.8ms)
Rendered devise/sessions/new.html.erb within layouts/application (19.7ms)
Rendered layouts/_header.html.erb (66.1ms)
Completed 200 OK in 173ms (Views: 98.3ms | ActiveRecord: 0.9ms)

显然401被Warden抛弃了,但我不知道为什么。
已将用户正确地重定向回登录页面,但是没有显示错误消息(这是正常的,因为重定向清除了它们)

我究竟做错了什么?

谢谢!

编辑1:

目前,我发现了一个快速破解方法。我在SessionsController#new中添加了它
if params[:user]
flash[:alert] = "Incorrect login or password"
end

不是很优雅,但至少我有一些东西。

最佳答案

您的Flash消息将不会被设置,因为Devise::SessionsController#create调用warden进行身份验证,如果失败,它将调用Devise::FailureApp。您的 Controller 从不处理故障情况。

如果您想要自定义消息,则可以为此自定义失败应用程序,Devise wiki中有一些文章介绍了如何执行此操作。

但是总的来说,您可以通过I18n自定义故障消息,并且可能有一种更好的方法来实现所需的功能,而无需覆盖Devise Controller 。

关于ruby-on-rails - Devise Warden 401凭据错误时未经授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14254227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com