在comments_controller中有 authenticate_user!。
before_action :authenticate_user!
当用户点击创建评论时,他们现在会重定向到users / sign_in页面。
但是,我想将它们重定向到root_url并发出通知登录。主页上有登录按钮(FB和G +)。
我看过this,但是当我实施它时,我只是得到一个黑色页面,其中包含相同的网址,已完成401未经授权。
答案 0 :(得分:4)
您可以将authenticate_user!
方法添加到application_controller.rb
class ApplicationController < ActionController::Base
protected
def authenticate_user!
redirect_to root_path, notice: "You must login" unless user_signed_in?
end
end
答案 1 :(得分:0)
<强> comments_controller.rb 强>
before_filter :loged_in?, :only => [:create, :edit, :destroy] #customize to fit your needs
private
def loged_in?
redirect_to root_path, notice: 'Your have to log in' unless current_user
end
它将检查current_user是否存在,如果用户已登录则会检查,否则会在给定通知的情况下重定向到根路径。
答案 2 :(得分:0)
我在Devise Wiki中添加了一个页面,显示了使用失败的应用程序执行此操作的正确方法:Redirect to new registration (sign up) path if unauthenticated
关键是要覆盖route
方法,就像这样:
# app/lib/my_failure_app.rb
class MyFailureApp < Devise::FailureApp
def route(scope)
:new_user_registration_url
end
end
然后让Devise使用您的失败应用程序:
# config/initializers/devise.rb
config.warden do |manager|
manager.failure_app = MyFailureApp
end
此方法比在控制器中覆盖authenticate_user!
更好,因为它不会破坏Devise所做的许多“幕后”工作,例如存储尝试的URL,以便在成功登录后可以重定向用户内。
如果您拥有Admin
和User
的设计资源,则可能需要为管理员保留默认的“新会话”功能。您可以通过检查正在处理哪种类型的范围来轻松完成此操作:
# app/lib/my_failure_app.rb
class MyFailureApp < Devise::FailureApp
def route(scope)
scope.to_sym == :user ? :new_user_registration_url : super
end
end