2013-07-22 3 views
0

모든 rspec 테스트가 통과되었지만 샘플 앱에서 로그 아웃 할 수 없습니다. 헤더의 계정 탭에서 "로그 아웃"을 클릭하면 링크가 로그인으로 변경되지 않지만 사용자가 아직 로그인 한 것처럼 유지됩니다.Michael Hartl : 8 장 - 샘플 앱에서 로그 아웃 할 수 없음

또한이 (매우) 유사 post. 그러나 레일스 콘솔에 기억 토큰을 추가 한 후에도 문제가 지속됩니다. 여기

여기

class SessionsController < ApplicationController 

    def new 
    end 

    def create 
    user = User.find_by_email(params[:session][:email].downcase) 
    if user && user.authenticate(params[:session][:password]) 
     sign_in user 
     redirect_back_or user 
    else 
     flash.now[:error] = 'Invalid email/password combination' 
     render 'new' 
    end 
    end 

    def destroy 
    sign_out 
    redirect_to root_url 
    end 
end 

가 _header.html.erb

<header class="navbar navbar-fixed-top navbar-inverse"> 
    <div class="navbar-inner"> 
    <div class="container"> 
     <%= link_to "sample app", root_path, id: "logo" %> 
     <nav> 
     <ul class="nav pull-right"> 
      <li><%= link_to "Home", root_path %></li> 
      <li><%= link_to "Help", help_path %></li> 
      <% if signed_in? %> 
      <li><%= link_to "Users", users_path %></li> 
      <li id="fat-menu" class="dropdown"> 
       <a href="#" class="dropdown-toggle" data-toggle="dropdown"> 
       Account <b class="caret"></b> 
       </a> 
       <ul class="dropdown-menu"> 
       <li><%= link_to "Profile", current_user %></li> 
       <li><%= link_to "Settings", edit_user_path(current_user) %></li> 
       <li class="divider"></li> 
       <li> 
        <%= link_to "Sign out", signout_path, method: "delete" %> 
       </li> 
       </ul> 
      </li> 
      <% else %> 
      <li><%= link_to "Sign in", signin_path %></li> 
      <% end %> 
     </ul> 
     </nav> 
    </div> 
    </div> 
</header> 

sessions_helper.rb 여기

module SessionsHelper 

    def sign_in(user) 
    cookies.permanent[:remember_token] = user.remember_token 
    self.current_user = user 
    end 

    def signed_in? 
    !self.current_user.nil? 
    end 

    def current_user=(user) 
    @current_user = user 
    end 

    def current_user 
    @current_user ||= User.find_by_remember_token(cookies[:remember_token]) 
    end 

    def current_user?(user) 
    user == current_user 
    end 

    def signed_in_user 
    unless signed_in? 
     store_location 
     redirect_to signin_url, notice: "Please sign in." 
    end 
    end 

    def sign_out 
    self.current_user = nil 
    cookies.delete(:remember_token) 
    end 

    def redirect_back_or(default) 
    redirect_to(session[:return_to] || default) 
    session.delete(:return_to) 
    end 

    def store_location 
    session[:return_to] = request.url 
    end 
end 

입니다 그리고 여기 모델 사용자입니다 sessions_controller.rb입니다 .rb

class User < ActiveRecord::Base 
    attr_accessible :email, :name, :password, :password_confirmation 
    has_secure_password 

    before_save {self.email = email.downcase} 
    before_create :create_remember_token 

    validates :name, presence: true, length: {maximum: 50} 
    VALID_EMAIL_REGEX = /\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i 
    validates :email, presence: true, format: { with: VALID_EMAIL_REGEX }, uniqueness: {case_sensitive: false}  
    validates :password, presence: true, length: {minimum: 6} 
    validates :password_confirmation, presence: true 
    after_validation { self.errors.messages.delete(:password_digest) } 

    def User.new_remember_token 
    SecureRandom.urlsafe_base64 
    end 

    def User.encrypt(token) 
    Digest::SHA1.hexdigest(token.to_s) 
    end 

    private 

    def create_remember_token 
     self.remember_token = User.encrypt(User.new_remember_token) 
    end 
end 
+0

쿠키가 삭제되지 않았습니까? 다른 모든 것은 괜찮아 보입니다. 쿠키 값을 삭제하려고 시도한 후에 쿠키 값을'puts '해보면 nil과 이후의 current_user 호출이 nil을 반환하는지 확인합니다 – DiegoSalazar

답변

0

이 문제도 발생했습니다. 이 시도 :

def sign_out 
    #https://stackoverflow.com/questions/7948756/why-are-my-rspec-tests-failing-but-my-app-is-working?lq=1 
    self.current_user = nil 
    @current_user = nil 
    cookies.delete(:remember_token) 
end 

그래서이 link을 (내 코드에서 주석 하나입니다) 확인하고 도움이된다면 참조하십시오. 행운을 빕니다!

관련 문제