繁体   English   中英

要求用户登录(Rails)

[英]Require a user to be logged in (Rails)

如何确保用户仅在登录后才能访问我的Web应用程序上的路由? 我已经有用户和会话模型,并且用户能够创建帐户。 但是,如何确保如果未登录,则始终将它们重定向到登录/注册页面,但是如果可以,则可以访问所有路由?

编辑:所以这就是我的应用程序控制器现在的样子:

class ApplicationController < ActionController::Base
    protect_from_forgery with: :exception
    helper_method :current_user

    private

    def current_user
       @current_user ||= User.find(session[:user_id]) if session[:user_id]
    end
end

因此,如果没有当前用户,我只希望允许访问我的Pages控制器及其操作(基本上是主页,注册,登录等)。 另一方面,如果有用户,我希望该用户能够访问我的路由文件中的所有路由。

class SomeController < ApplicationController
  def show
    if current_user.nil?
      redirect_to '/path/to/login'
    end
  end
end

如果您粘贴一些代码,可能会给出更详细的答案,否则我们都只能猜测您的方法被调用了。

如果您使用的是devise,则它带有内置的辅助方法authenticate_user! 应该放在您的应用程序控制器中。

如果您不使用devise,则可以定义自己的方法(在本例中,我将复制devise) authenticate_user! 在应用程序控制器中并调用before动作

    def current_user
    @current_user ||= User.find(session[:user_id]) if session[:user_id]
    end
    hide_action :current_user

    private
    def authenticate_user!
    redirect_to :root if current_user.nil?
    end

   end 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM