环境: 红宝石:2.5.1 导轨:5.2.0 设计:4.4.3
我在rails应用程序中添加了具有可确认功能的devise gem。在登录页面上,我按预期收到“无效的电子邮件或密码” Flash消息,但是当我尝试登录未确认的帐户时,没有收到预期的Flash消息,例如“登录前确认您的电子邮件”或任何附带以下消息的消息:在devise.yml文件中未确认。 在服务器日志上,我得到:
Started POST "/login" for 127.0.0.1 at 2018-08-12 19:26:04 +0530
Processing by Users::SessionsController#create as JS
Parameters: {"utf8"=>"✓", "authenticity_token"=>"2AZ9GqM2yqKKqHbBZ0ouB1YqwcRhLzyloYkHDqem5EcSmuE1BPCuX+B6/wpC5wM14DRbOAOw1YUI6TvNMj5f6g==", "user"=>{"email"=>"asdf@as.df", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Log In"}
User Load (57.9ms) SELECT "users".* FROM "users" WHERE "users"."email" = $1 ORDER BY "users"."id" ASC LIMIT $2 [["email", "asdf@as.df"], ["LIMIT", 1]]
(0.3ms) BEGIN
(0.2ms) COMMIT
Completed 401 Unauthorized in 362ms (ActiveRecord: 58.3ms)
与注册表格相同,当我尝试使用已注册的电子邮件地址进行注册时,我没有收到任何消息,并停留在注册页面上。注册服务器日志:
Started POST "/" for 127.0.0.1 at 2018-08-12 19:33:06 +0530
Processing by Users::RegistrationsController#create as JS
Parameters: {"utf8"=>"✓", "authenticity_token"=>"2AZ9GqM2yqKKqHbBZ0ouB1YqwcRhLzyloYkHDqem5EcSmuE1BPCuX+B6/wpC5wM14DRbOAOw1YUI6TvNMj5f6g==", "user"=>{"full_name"=>"asdf asdf", "email"=>"james@bond.uk", "password"=>"[FILTERED]"}, "commit"=>"Sign Up"}
(0.3ms) BEGIN
User Exists (1.0ms) SELECT 1 AS one FROM "users" WHERE "users"."email" = $1 LIMIT $2 [["email", "james@bond.uk"], ["LIMIT", 1]]
User Exists (1.1ms) SELECT 1 AS one FROM "users" WHERE LOWER("users"."email") = LOWER($1) LIMIT $2 [["email", "james@bond.uk"], ["LIMIT", 1]]
(0.5ms) ROLLBACK
Rendering users/registrations/new.html.erb within layouts/application
Rendered users/registrations/new.html.erb within layouts/application (3.7ms)
Rendering users/sessions/new.html.erb
Rendered users/sessions/new.html.erb (1.4ms)
Rendered shared/_login_modal.html.erb (2.0ms)
Rendering users/registrations/new.html.erb
Rendered users/registrations/new.html.erb (0.4ms)
Rendered shared/_signup_modal.html.erb (0.9ms)
Rendered shared/_header.html.erb (5.1ms)
Rendered shared/_footer.html.erb (0.3ms)
Completed 200 OK in 310ms (Views: 60.5ms | ActiveRecord: 75.0ms)
Devise帮助程序文件
def devise_error_messages!
return "" unless devise_error_messages?
messages = resource.errors.full_messages.map { |msg| content_tag(:p,msg)}.join
sentence = I18n.t("errors.messages.not_saved",
:count => resource.errors.count,
:resource => resource.class.model_name.human.downcase)
html = <<-HTML
<div class="error-description">
#{messages}
</div>
HTML
html.html_safe
end
def devise_error_messages?
!resource.errors.empty?
end
登录会话控制器
class Users::SessionsController < Devise::SessionsController
after_action :unauthenticated
# POST /resource/sign_in
def create
self.resource = warden.authenticate(auth_options)
redirect_to new_user_session_path and return if resource.nil?
set_flash_message!(:notice, :signed_in)
sign_in(resource_name, resource)
yield resource if block_given?
respond_with resource, location: after_sign_in_path_for(resource)
end
def unauthenticated
flash[:error] = t("devise.failure.#{request.env['warden'].message}") unless request.env['warden'].message.blank?
end
end