【发布时间】:2011-02-13 09:39:08
【问题描述】:
我似乎无法弄清楚我在这里做错了什么。我已经实现了 Ryan Bates 教程中的 Super Simple Authentication,当登录部分正常运行时,我无法收到错误消息并重定向以正确发生登录错误。
Ryan Bates 在他的 cmets 中承认他忽略了这一点,但似乎无法实施他的建议。基本上发生的事情是,当有人正确登录时,它就可以工作。当输入错误的密码时,它会执行相同的重定向并闪烁“成功登录”,以为他们不是。管理员链接不显示(这是正确的,链接是否受 保护)但我需要它说“登录失败”并重定向到登录路径。这是我的代码:
会话控制器
class SessionsController < ApplicationController
def create
if
session[:password] = params[:password]
flash[:notice] = 'Successfully logged in'
redirect_to posts_path
else
flash[:notice] = "whoops"
redirect_to login_path
end
end
def destroy
reset_session
flash[:notice] = 'Successfully logged out'
redirect_to posts_path
end
end
应用控制器
class ApplicationController < ActionController::Base
helper_method :admin?
protected
def authorize
unless admin?
flash[:error] = "unauthorized request"
redirect_to posts_path
false
end
end
def admin?
session[:password] == "123456"
end
helper :all # include all helpers, all the time
protect_from_forgery # See ActionController::RequestForgeryProtection for details
#
end
【问题讨论】:
-
只是一个错字吗? 'if' 关键字后面不应该有换行符吗?
-
尝试将会话[密码] 移动到同一行,但没有成功。
-
您好。如果 session[:password] = session[:password] 或者您的代码乱码,您的代码是否会读取?
-
应该是 == not = if session[:password] == params[:password] then ...
-
所以添加 == vs = 也不起作用。
标签: ruby-on-rails ruby session