0
我已经实施了设计正常工作的设计。当用户注册了他们第一次获得:设计路由可确认
重新定向到应用程序根目录位于localhost:3000/EN
闪存公告称“与确认链接的邮件已发送到您的电子邮件地址,请打开链接以激活您的帐户。“
到目前为止好。
我再更新应用控制器:
class ApplicationController < ActionController::Base
before_filter :authenticate_user!
end
新签约用户然后发现自己被重定向到本地主机:3000/EN /用户/ sign_in,使用易混淆的消息“您需要登录或注册然后继续。“
我一直在浏览设计how to's,但尚未破解它。解决这个问题最简单的方法是什么?
更新
这里是应用程序控制器的更多详细信息:
class ApplicationController < ActionController::Base
protect_from_forgery
before_filter :authenticate_user!
before_filter :set_i18n_locale_from_params
rescue_from CanCan::AccessDenied do |exception|
flash[:error] = "Access denied!"
redirect_to root_url
end
protected
def set_i18n_locale_from_params
...
end
end
更新
这里是日志的要求。
Started POST "/en/users" for 127.0.0.1 at 2012-10-05 17:28:37 +0100
[17:28:37] Processing by Devise::RegistrationsController#create as HTML
[17:28:37] Parameters: {"utf8"=>"✓", "authenticity_token"=>"xUGLBMvZVWrtqLWpnAsa7R361QaGrOz/aVfEwvlS6xY=", "user"=>{"email"=>"[email protected]", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Sign up", "locale"=>"en"}
[17:28:37] (0.1ms) BEGIN
[17:28:37] User Exists (0.6ms) SELECT 1 AS one FROM "users" WHERE "users"."email" = '[email protected]' LIMIT 1
[17:28:37] User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."confirmation_token" = 'a2XPMojypDn6uzzVAqcs' LIMIT 1
[17:28:37] SQL (16.6ms) INSERT INTO "users" ("confirmation_sent_at", "confirmation_token", "confirmed_at", "created_at", "current_sign_in_at", "current_sign_in_ip", "email", "encrypted_password", "failed_attempts", "last_sign_in_at", "last_sign_in_ip", "locale", "locked_at", "remember_created_at", "reset_password_sent_at", "reset_password_token", "role", "sign_in_count", "unconfirmed_email", "unlock_token", "updated_at") VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21) RETURNING "id" [["confirmation_sent_at", Fri, 05 Oct 2012 16:28:38 UTC +00:00], ["confirmation_token", "a2XPMojypDn6uzzVAqcs"], ["confirmed_at", nil], ["created_at", Fri, 05 Oct 2012 16:28:38 UTC +00:00], ["current_sign_in_at", nil], ["current_sign_in_ip", nil], ["email", "[email protected]"], ["encrypted_password", "$2a$10$HnsOCZgVTaEg9bniVzBe7OKIvw4x5hdAqjwrCG14eQDCvSTz8mxdu"], ["failed_attempts", 0], ["last_sign_in_at", nil], ["last_sign_in_ip", nil], ["locale", nil], ["locked_at", nil], ["remember_created_at", nil], ["reset_password_sent_at", nil], ["reset_password_token", nil], ["role", 0], ["sign_in_count", 0], ["unconfirmed_email", nil], ["unlock_token", nil], ["updated_at", Fri, 05 Oct 2012 16:28:38 UTC +00:00]]
[17:28:37] Rendered devise/mailer/confirmation_instructions.html.erb (0.8ms)
[17:28:37]
Sent mail to ...
[17:28:37] (0.8ms) COMMIT
[17:28:37] Redirected to http://localhost:3000/en
[17:28:37] Completed 302 Found in 5050ms (ActiveRecord: 0.0ms)
[17:28:42]
Started GET "/en" for 127.0.0.1 at 2012-10-05 17:28:42 +0100
[17:28:42] Processing by PageController#index as HTML
[17:28:42] Parameters: {"locale"=>"en"}
[17:28:42] Completed 401 Unauthorized in 0ms
[17:28:42]
Started GET "https://stackoverflow.com/users/sign_in" for 127.0.0.1 at 2012-10-05 17:28:42 +0100
[17:28:42] Processing by Devise::SessionsController#new as HTML
[17:28:42] Rendered devise/shared/_links.erb (0.9ms)
[17:28:42] Rendered devise/sessions/new.html.erb within layouts/application (6.8ms)
[17:28:42] Completed 200 OK in 22ms (Views: 20.0ms | ActiveRecord: 0.0ms)
在routes.rb中我有:
root :to => "page#index"
所以发生了什么是的PageController#指数将用户重定向到登录所以问题归结为如何仅此免除:的authenticate_user!在应用程序控制器中。
分辨率
所以感谢jibiel和this question答案是:
class PageController < ApplicationController
skip_before_filter :authenticate_user!
end
Simples!
谢谢。恐怕这不起作用。它的行为方式完全一样。我尝试重新启动服务器并将该线路移至应用程序控制器的最顶端。我已经在这个问题中提供了更多细节,以防这种情况的发生 –
然后请提供礼貌行动的日志。我认为这是像开机POST“/用户”...处理由RegistrationsController#创建为HTML。需要知道认证失败的地方。这只是重定向,困扰你吗?用户是否正确创建了该案例? – jibiel
这很有帮助。我已经发布了显示控制器操作的日志:authenticate_user! –