[英]Authentication Problem - not recognizing 'else' - Ruby on rails
我似乎无法弄清楚我在做什么错。 我已经实现了Ryan Bates教程中的“ 超级简单身份验证” ,并且在登录部分正常运行的同时,我无法收到错误消息,并且无法正确登录以进行错误登录。
瑞安·贝茨(Ryan Bates)在评论中承认,他没有提及这一点,但似乎无法执行他的建议。 基本上发生的是,当某人正确登录时它可以工作。 输入错误的密码后,它将执行相同的重定向,并以“未成功登录”的方式闪烁显示(成功登录)。 管理员链接没有显示(这是正确的,并且链接受<%if admin?%>保护),但是我需要它说“失败的登录”并重定向到登录路径。 这是我的代码:
SessionsController
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
ApplicationController的
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
您需要使用Ruby的比较运算符
==
而不是赋值运算符
=
。
您的
create
操作应为:
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
编辑:问题是您实际上没有在SessionsController
中检查输入的密码与正确的密码。 将您的create
方法更改为此:
def create
if params[:password] == '123456'
session[:password] = params[:password]
flash[:notice] = 'Successfully logged in'
redirect_to posts_path
else
flash[:notice] = "whoops"
redirect_to login_path
end
end
像这样对密码进行硬编码并将其存储在会话中以供admin?
使用是不理想的admin?
helper方法,但这应该是超级简单的身份验证 。
if #YOU MISSING SOMETHING HERE WHICH Returns TRUE IF USER IS VALID
session[:password] = session[:password]
flash[:notice] = 'Successfully logged in'
redirect_to posts_path
else
flash[:notice] = "invalid login" #CHange if messaage for invalid login
redirect_to login_path
end
一定是
if session[:password] == params[:password]
您绝不会因以下原因而失败:
if session[:password] = session[:password]
这将永远是正确的。 您可能想要类似的东西:
if session[:password] == 'canihazpasswrd' then
do_something_here
编辑 :请参阅@john的答案。 :)
尝试这个:
def create
if session[:password] == '123456'
flash[:notice] = 'Succesfully logged in'
redirect_to home_path
else
flash[:notice] = "Incorrect Password!"
redirect_to login_path
end
end
关键是您使用的教程不进行用户身份验证。 它仅检查登录名是否属于管理员,因此将显示一些内容。
这样,您永远不会输入错误的登录名/密码,而只需输入admin / non-admin。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.