我使用Rails 4创建了一个应用程序,用户只有在记录后才能访问该网站。我没有使用Devise这样做,但我跟着this railcast。它运行良好,但我有一个问题,当用户登录时,他仍然可以进入登录页面,我希望当他尝试进入登录页面时,他被重定向到主页,但我没有找到这样做的方法。
会话控制器
class SessionsController < ApplicationController
def new
if @current_user.nil?
render :layout => false
else
redirect_to root_url, :notice => "Vous êtes déjà connecté"
end
end
#Connexion
def create
user = User.authenticate(params[:email], params[:password])
if user
if params[:remember_me]
cookies.permanent[:auth_token] = user.auth_token
else
cookies[:auth_token] = user.auth_token
end
session[:user_id] = user.id
redirect_to root_url, :notice => "Bienvenue !"
else
redirect_to :connect, :notice => "E-mail ou mot de passe incorrect"
end
end
def destroy
session[:user_id] = nil
cookies.delete(:auth_token)
redirect_to :connect, :notice => "Déconnecté !"
end
end
应用程序控制器
def current_user
@current_user ||= User.find_by_auth_token!(cookies[:auth_token]) if cookies[:auth_token]
end
我尝试在我的new
操作中添加一个if并检查是否有当前用户但是它不起作用
答案 0 :(得分:0)
我认为你应该使用current_user
而不是@current_user
。在您第一次调用@current_user
之前,nil
的值为current_user
。我建议使用before_action
:
class SessionsController < ApplicationController
before_action :ensure_no_current_user, only: [:new]
def new
render :layout => false
end
private
def ensure_no_current_user
if current_user
redirect_to root_url, :notice => "Vous êtes déjà connecté"
false
end
end
end
答案 1 :(得分:0)
根据您提到的railscast,没有像@current_user
这样的变量。相反,current_user
是一种让您知道用户是否已登录的方法。
@current_user
已在current_user
方法中定义,但您无法使用其他方法进行访问。所以你只需要使用方法current_user
,如下所示:
def new
redirect_to root_url if current_user
# other code
end