不要在“登录”表单中选中“记住我”复选框

时间:2014-11-25 09:15:07

标签: ruby-on-rails railstutorial.org

每个人都过得愉快。 我正在使用Rails Tutorial(3ed)的第8章“登录,注销”

在代码清单8.58中,我在集成测试中有一个Erro。

FAIL["test_current_user_returns_right_user_when_session_is_nil"
--- expected
+++ actual
@@ -1 +1 @@
-#<User id: 762146111, name: "Michael Example", email: "michael@example.com", 
created_at:      "2014-11-25 08:52:36", updated_at: "2014-11-25 08:52:36",       
password_digest: "$2a$04$PqPt.GZHyu3xKlQWh4UJM./y7pEz2w9Twp2XOlg0Eor...",
remember_digest: "$2a$04$hDNgctx0rqYZq9sH4ZO3Lu1MfkfGKtXgdN11Lhv.yVD...">
+nil
test/helpers/sessions_helper_test.rb:11:in `block in <class:SessionsHelperTest>'

在session_helper.rb的这一部分

test "current_user returns right user when session is nil" do
assert_equal @user, current_user #in this line i have an error
assert is_logged_in?
end

我的session_controller.rb

  def create
user = User.find_by(email: params[:session][:email].downcase)
if user && user.authenticate(params[:session][:password])
  log_in user
  params[:session][:remember_me] == '1' ? remember(user) : forget(user)
  redirect_to user
else
  flash.now[:danger] = 'Invalid email/password combination' # Not quite right!
  render 'new'
end
end

我的session_helper.rb

      # Forgets a persistent session.
def forget(user)
user.forget
cookies.delete(:user_id)
cookies.delete(:remember_token)
end

我的表格带复选框

<div class="row">
<div class="col-md-6 col-md-offset-3">
<%= form_for(:session, url: login_path) do |f| %>

  <%= f.label :email %>
  <%= f.text_field :email, class: 'form-control' %>

  <%= f.label :password %>
  <%= f.password_field :password, class: 'form-control' %>

  <%= f.label :remember_me, class: "checkbox inline" do %>
    <%= f.check_box :remember_me %>
    <span>Remember me on this computer</span>
  <% end %>

  <%= f.submit "Log in", class: "btn btn-primary" %>
<% end %>

<p>New user? <%= link_to "Sign up now!", signup_path %></p>
</div>
</div>

我尽力了...谢谢

我认为,我的错误工作此复选框,如果没有标记,我的会话仍然有效,只有当我按下注销链接时才会退出用户会话。

2 个答案:

答案 0 :(得分:0)

我遵循相同的教程(我在Ch9结束时)。

我发现您已经删除了您所说的session_helper.rb内容,但我的匹配代码"current_user returns right user when session is nil"位于test\helpers\sessions_helper_test.rb

你介意发布该文件的全部内容吗?这是该文件前8行的片段(所有内容减去实际测试)。我倾向于相信你忘了添加设置方法:

require 'test_helper'

class SessionsHelperTest < ActionView::TestCase

  def setup
    @user = users(:xxx) # Where xxx is the name of the user in users.yml
    remember(@user)
  end
.
.
.
end

答案 1 :(得分:0)

尝试使用@current_user代替current_usercurrent_user是在测试范围内找不到的局部变量,而@current_user是可在全局访问的实例变量。希望有所帮助。