0

Restful Authenticationでは、がfalseに設定されているcurrent_user場合@current_user、(通常はDBから)ユーザーを再度検索しないことを意味しますが、それは問題ないことを意味し、DBで再度nil検索できることを意味します。

の8行目lib/authenticated_system.rb

def current_user
  @current_user ||= (login_from_session 
                      || login_from_basic_auth 
                      || login_from_cookie) unless @current_user == false
end

複雑なことは、などからDBを検索しようとしてそれlogin_from_sessionが見つからない場合、割り当てられる最終値@current_usernilであり、メソッドはnil(メソッドで最後に評価された値)を返します。@current_userコード内に実際にfalseに設定できる場所が他に2つあり、それによってがトリガーされunless、ステートメント全体が。のままでnil、メソッドが...を返す場合を除きます。@current_userfalsenil

コードがこれらの複雑な事実に依存することについて、私はほとんど言葉を失いました。 falseは特別な意味をnil持ち、コードでは特別な意味を持ちますが、文書化もコメントもされておらず、であり続けることができcurrent_userます。それは実際にはデザインパターンなので、人々はそれをよく知っていて、よく知っていますか?nil@current_userfalse

4

1 に答える 1

1

RestfulAuthentication は、Rails の歴史のこの時点ではかなり古くて厄介なものと見なされています。これは、あなたが指摘しているようなコードが原因の 1 つです。

ほとんどの人は、Devise や Authlogic などの最新の認証ソリューションを使用することをお勧めします。

于 2011-02-24T05:45:52.200 に答える