我知道在这个主题上有很多类似的问题,但答案都没有。
我决定遵循Michael Hartl的建议并实施我自己的身份验证代码,而不是使用预定义的包。但是我的铁路教程解决方案遇到了问题。
我已经使用github中的教程代码直接对我的代码进行了双/三检查,我正在尽可能正确地实现,但是我遇到了一些大问题。
当前用户未正确启动
助手/ sessions_helpers.rb
...
def current_user=(user)
@current_user = user
end
def current_user
#this line of code will change in the tutorial section 9 but its okay for now
@current_user ||= User.find_by_remember_token(cookies[:remember_token])
end
def signed_in?
!current_user.nil?
end
使用视图<% if signed_in? %>
中的帮助程序的任何代码始终返回false,即使身份验证有效也是如此。任何通过current_user.first_name.capitalize
等用户方法访问数据的尝试都会失败,并显示undefined method ``first_name' for nil:NilClass
请注意,这仍然是教程中的第8部分(目前还没有第9部分,我不想在基础知识无法正常工作的情况下为此身份验证情况添加更多代码。感谢您的帮助... < / p>
答案 0 :(得分:3)
听起来有些单元测试可以帮助缩小您的注意力并突出显示哪些部分正常工作,哪些部分不正常。或者如果您愿意,可以从集成测试开始。你给出的描述听起来好像你正在通过浏览器进行测试,也许会查看日志。
我认为你会发现在你去的时候写测试是值得的。它还可以让您更容易看到以后是否会破坏以前的工作。
答案 1 :(得分:1)
首先,替换“User.find_by_remember_token(cookies [:remember_token]) “用有效的东西来确保你的电话有效。
此外,您的方法是会话中的所有方法,因此只能在会话控制器中使用。
如果您希望在所有视图中都可以访问它们,请将这些方法放在application_helper.rb。
中