2012-01-24 9 views
1

私はrailstutorial認証メカニズムをリファクタリングしようとしています。リファクタリングしようとすると、 'Has_secure_password'の使い方は?

私のバージョンのレールは3.2.0で、私はruby 1.9.3-p0とpostrgresql 9.1を使用しています。それはSIGINに失敗したが、失敗で成功し記号になるとこれまでのところ、私のテストを合格している。(理由は、私は古いサインインメカニズムをリファクタリングする必要がある)

ここ

は、私のセッションヘルパーですsign_in機能:私はsign_in機能ですぐにご覧

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

1つの問題は、has_secure_passwordはすでになどの暗号化と塩の世話をされています...私の考えは多分、私が代わりにemployee.saltのpassword_digest使用すべきであるということでしたが、それも失敗しました。

クッキーを2時間後に期限切れにしたいと考えています。クッキーの下でapi.rubyonrails.orgでこのオプションが見つかりました。

cookies[:key] = { 
        value => "employee.id, employee.salt", 
        expires => 2.hours.from.now 
        } 

私はそれは私がレールに従業員のモデルで定義された認証の定義、(ユーザモデル)を使用する必要がないことを意味してhas_secure_passwordが既にauthenticateメソッドを持っているという事実に関係していているもう一つの問題は、チュートリアルが、私はそれをコメントアウトするとき、私はフラグ値を得る:ここで

NoMethodError: undefined method 'authenticate' 

は、私のセッションコントローラはアクションを作成することです:

def create 
    employee = Employee.authenticate(params[:session][:email], 
            params[:session][:password]) 
    if employee.nil? 
    flash.now[:error] = "Invalid email/password combination." 
    @title = "Sign in" 
    render 'new' 
    else 
    sign_in employee 
    redirect_back_or employee 
    end 
end 

それはトンと思われます彼はEmployee.authenticateが問題です。

だから私は基本的に3つの質問があり、次のように彼らは、次のとおりです。

を私たちは、従業員のパスワードに塩などを暗号化し、適用のかなりlengthly過程を経るレールチュートリアル。 has_secure_passwordにはすでにこれが考慮されているので、暗号化されたパスワードを取得する関数や引数にはどのような変数を渡しますか?

次の質問は、クッキーの有効期限と関係があり、どのように私はそれをsign_in関数で使用するのですか?

最後に、authenticateメソッドを使用して、レールが正規のメソッドとして認識するようにするにはどうすればよいですか?

私はrailsguide、api.rubyonrails.orgとこれに似たSOに関する他の質問を検索しました。もちろん、これは単に私の原則の理解の私の不足を指摘していますが、私は学んでいると方向をよく取る。

私と共有していただけると思われるご意見、ご提案、またはリソースをありがとうございます。私はhas_secure_passwordのAPIを再読み込みして認証

アップデートはので、私はで動作するように何かを持っている...唯一の引数、つまり暗号化されていないパスワードを取ります。

私はまだあなたが提供する可能性のある助けや考えや提案が必要です...ありがとう。

更新 私はセッションタイムアウトを扱うこの記事が見つかりました:私はまだ私はそれが私のために働くことを得ることができるかどうかを確認するために働いていますが、それはrailstutorialに合わせて調整されて http://madkingsmusings.blogspot.com/2011/05/session-timeouts-on-rails.html を。 その他の質問については、Michael HartlがRuby on Railsチュートリアルの第2版を公開しています。そのエディションでは、has_secure_passwordを扱います。

答えて

0

新しいバージョンのrailstutorialが利用可能です。

最初と最後の質問について...認証は非常に簡単です。 Userモデルでは:SessionControllerで

has_secure_password 

:SessionsHelperで

def create 
    user = User.find_by_email(params[:session][:email]) 
    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 sign_in(user) 
    cookies[:remember_token] = user.remember_token 
    current_user = user 
end 

それは明らかにされている必要がありますが、私も探しについて考えていませんでしたgithubのコード多分誰かがリンクを感謝するでしょう。 Here is Hartl's 2nd edition Sample_App source on github

関連する問題