controller 里的方法为
def create
@user = User.find_by_email(params[:session][:email].downcase)
if @user && @user[:locked]
redirect_to new_session_path
elsif @user && !@user[:locked] && @user.authenticate(params[:session][:password])
sign_in @user
redirect_back_or current_users_path
else
redirect_to new_session_url
end
end
grape 的 api 方法为
post 'login' do
@user = User.find_by_email(params[:session][:email].downcase)
if @user && @user[:locked]
redirect '/users/login'
elsif @user && !@user[:locked] && @user.authenticate(params[:session][:password])
sign_in @user
redirect '/users/current'
else
redirect '/users/login'
end
end
grape 的 helper 方法有
def current_user
@current_user ||= User.find_by_remember_token(cookies[:remember_token])
end
def current_user=(user)
@current_user = user
end
def sign_in(user)
if params[:remember_me]
cookies.permanent[:remember_token] = user.remember_token
else
cookies[:remember_token] = user.remember_token
end
self.current_user = user
end
现在遇到的问题是
post 'login' do
@user = User.find_by_email(params[:session][:email].downcase)
if @user && @user[:locked]
redirect '/users/login'
elsif @user && !@user[:locked] && @user.authenticate(params[:session][:password])
sign_in @user
redirect '/users/current'
else
redirect '/users/login'
end
end
我在 sign_in @user这步打印出 current_user 是有值的,但是 redirect '/users/current'不成功,会应为 current_user 值为空而被重定位。求教原因。