0

このトピックに関して多くの同様の質問があったことを私は知っていますが、答えのどれも関係していません。

事前定義されたパッケージを使用する代わりに、Michael Hartlのアドバイスに従い、独自の認証コードを実装することにしました。しかし、私は鉄道学校からの彼の解決策で問題に直面しています。

githubのチュートリアルコードを使用してコードを直接ダブル/トリプルチェックしました。可能な限り正しく実装していますが、いくつかの大きな問題があります。

Current_userが正しく開始されていません

helpers / 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 に答える