Rails 4设计 - 如果未经过身份验证,则重定向用户

时间:2014-06-15 16:25:58

标签: ruby-on-rails ruby-on-rails-4 devise

在comments_controller中有 authenticate_user!

before_action :authenticate_user!

当用户点击创建评论时,他们现在会重定向到users / sign_in页面。

但是,我想将它们重定向到root_url并发出通知登录。主页上有登录按钮(FB和G +)。

我看过this,但是当我实施它时,我只是得到一个黑色页面,其中包含相同的网址,已完成401未经授权

3 个答案:

答案 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,以便在成功登录后可以重定向用户内。

具有多种用户类型

如果您拥有AdminUser的设计资源,则可能需要为管理员保留默认的“新会话”功能。您可以通过检查正在处理哪种类型的范围来轻松完成此操作:

# app/lib/my_failure_app.rb
class MyFailureApp < Devise::FailureApp
  def route(scope)
    scope.to_sym == :user ? :new_user_registration_url : super
  end
end