我创建了一个登录控制器,一旦用户登录,他将被定向到他的主页。如下所示,我在登录控制器中设置会话变量。在应用程序控制器中,我有当前的用户方法,它将检查用户是否存在当前登录的密钥。虽然我成功登录,但如果我稍后使用ApplicationController中给出的'current_user方法',它会将我重定向到登录页面,因为current_user是一个nil对象。有没有人知道我哪里出错了。
class User::Signin::LoginController < ApplicationController
def login
render('/login')
end
def attempt_login
@user = User.find_by_email(params[:user][:email])
if @user && @user.authenticate(params[:user][:password])
session[:user_id] = @user.id
flash[:notice] = "You are now logged in"
if @user.role == 1
redirect_to controller: '/patient/home', action: 'show', :id => @user.patient_id
end
if @user.role ==2
redirect_to controller: '/doctor/home', action: 'show', :id => @user.doctor_id
end
if @user.role ==3
redirect_to controller: '/staff/home', action: 'show', :id => @user.staff_id
end
else
flash.now[:notice] = "Invalid username/ password combination."
render 'login/login'
end
end
def logout
session[:user_id] = nil
flash[:notice] = 'logged out'
redirect_to('/login')
end
end
ApplicationController
class ApplicationController < ActionController::Base
protect_from_forgery
helper_method :current_user
def current_user
@current_user ||= User.find_by_id!(session[:user_id]) if session[:user_id]
end
def require_user
redirect_to '/login' unless current_user
end
def require_admin
redirect_to '/login' unless current_user.admin?
end
def require_doctor
redirect_to '/login' unless current_user.doctor?
end
def require_patient
redirect_to '/login' unless current_user.patient?
end
def require_staff
redirect_to '/login' unless current_user.staff?
end
private
def confrim_logged_in
unless session[:user_id]
flash[:notice] = "Please log in"
redirect_to '/login'
end
end
end
使用current_user
class Patient::HomeController < ApplicationController
layout 'patient'
protect_from_forgery
def show
@patient = Patient.find(params[:id])
@current_user=current_user
render('patients/home')
end
end
答案 0 :(得分:0)
尝试以下示例,希望这有帮助
def view_takeQuiz(request,question):
try:
myquest = Question.objects.get(question = question)
context = {'question': myquest.question, 'answerA': myquest.answerA, 'answerB': myquest.answerB,
'answerC': myquest.answerC,'answerD': myquest.answerD,
'correctAnswer': myquest.correctAnswer}
return render(request, 'multipleChoice/takeQuiz.html', context)
except:
return render(request, 'multipleChoice/quiz.html', {})
答案 1 :(得分:0)
我能够通过从params [:user] [:email]更改为params [:session] [:email]来更正错误。这样做会导致我相应地更改视图变量。
def attempt_login
@user = User.find_by_email(params[:session][:email])
if @user && @user.authenticate(params[:session][:password])
session[:user_id] = @user.id
flash[:notice] = "You are now logged in"
//other code//
end