0

我知道关于这个话题有很多类似的问题,但没有一个答案是相关的。

我决定听从 Michael Hartl 的建议并实现我自己的身份验证代码,而不是使用预定义的包。但是我在 railstutorial 的解决方案中遇到了问题。

我已经直接使用 github 中的教程代码对我的代码进行了双重/三重检查,据我所知,我正在正确实施,但我有一些大问题。

Current_user 未正确启动

助手/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 节,当基础知识不起作用时,我真的不想在这种身份验证情况下添加更多代码。感谢您的帮助...

4

2 回答 2

3

听起来有些单元测试将有助于缩小您的关注范围并突出显示哪些部分工作正常,哪些部分不正常。或者,如果您愿意,可以从集成测试开始。您提供的描述听起来像是您正在通过浏览器进行测试,并且可能正在查看日志。

我想你会发现边走边写测试是值得的。它还可以让您更容易地查看您以后是否破坏了曾经有用的东西。

于 2012-11-14T21:15:56.807 回答
1

首先,将“User.find_by_remember_token(cookies[:remember_token])”替换为有效的内容,以确保您的调用正常工作。

此外,您的方法都是会话上的所有方法,因此只能在会话控制器中使用。

如果您希望它们在所有视图中都可以访问,请将方法放在 application_helper.rb 中。

于 2012-11-14T21:11:10.183 回答