0

Hartl チュートリアルに基づいたプロジェクトに取り組んでいます。機能するユーザー認証モデルをセットアップしました...ほとんど。ユーザーはサインアップできますが、sign_in プロセスに問題があります。ユーザーがサインアウトした場合、サインインすることはできません。データベースがユーザーのサインアップ情報を保存していることを確認したので、問題はユーザーがサインアップしたことを確認することです。ログを見ましたが、役に立ちません。

これは私が得るものです:

  Started POST "/sessions" for 127.0.0.1 at 2012-04-15 13:56:46 -0500
    Processing by SessionsController#create as HTML
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"itOIPKPrXlymcBujKMu4Xjwvs6GlD3jteBQJf+/mYEY=", "session"=>{"email"=>"tester3@tester3.com", "password"=>"[FILTERED]"}, "commit"=>"Sign in"}
    User Load (0.3ms)  SELECT `users`.* FROM `users` WHERE `users`.`email` = 'tester3@tester3.com' LIMIT 1
  Rendered sessions/new.html.erb within layouts/application (1.6ms)
  Rendered layouts/_stylesheets.html.erb (2.0ms)
    User Load (0.3ms)  SELECT `users`.* FROM `users` WHERE `users`.`id` IS NULL LIMIT 1
    CACHE (0.0ms)  SELECT `users`.* FROM `users` WHERE `users`.`id` IS NULL LIMIT 1
  Rendered layouts/_header.html.erb (3.2ms)
  Rendered layouts/_footer.html.erb (0.3ms)
  Completed 200 OK in 30ms (Views: 16.1ms | ActiveRecord: 2.6ms)

しかし、私が見るべきはこれです。

  Started POST "/sessions" for 127.0.0.1 at 2012-04-15 12:50:24 -0500

    Processing by SessionsController#create as HTML

    Parameters: {"utf8"=>"✓", "authenticity_token"=>"h/M5VYBaG16sGiGHTWo26GJSU1/TlMNFjQd5TN1VZ3Y=", "session"=>{"email"=>"tester3@tester3.com", "password"=>"[FILTERED]"}, "commit"=>"Sign in"}

    User Load (0.3ms)  SELECT `users`.* FROM `users` WHERE `users`.`email` = 'tester3@tester3.com' LIMIT 1

    User Load (0.2ms)  SELECT `users`.* FROM `users` WHERE `users`.`email` = 'tester3@tester3.com' LIMIT 1[0m

  Redirected to http://localhost:3000/users/103

  Completed 302 Found in 19ms

私の質問は次のとおりです。この問題のトラブルシューティングを行う最善の方法は何ですか?
私が見始めるべき「明白な」場所は何ですか。ここにあるユーザー認証コードを使用しており、他のプロジェクトに正常に実装しました。私を悩ませているのはこれだけです。これが私の認証コードです。

module SessionsHelper

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

  def current_user=(user)
    @current_user = user
  end

  def current_user
    @current_user ||= user_from_remember_token
  end

  def signed_in?
    current_user.present?
    p "user signed_in? method called" 
    p current_user
  end

  def sign_out
    cookies.delete(:remember_token)
    self.current_user = nil
    p "user has signed out" #Method does NOT get called
  end



  def current_user?(user)
    user == current_user
  end

  def authenticate
    deny_access unless signed_in?
  end

  def deny_access
    store_location
    redirect_to signin_path, :notice => "Please sign in to access this page."
  end

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

  private

    def user_from_remember_token
       p "Looking user up from the cookie"
      User.authenticate_with_salt(*remember_token)
    end

    def remember_token
      cookies.signed[:remember_token] || [nil, nil]
    end

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

    def clear_return_to
      session[:return_to] = nil
    end
end
4

1 に答える 1

2

あなたは明らかを求めたので、ここでは明白です...

アクションの開始時に Cookie の値を出力できます。

アクションのさまざまな時点で例外を発生させることができます。私はこれをするのが好きです。印刷はバッファリングされた出力を通過できるため、「p」よりも信頼性が高くなります。例外の文字列に出力する情報を入れました。開発モードは、params などの役立つ情報も吐き出します。

于 2012-04-15T19:34:18.953 に答える