質問

Rails アプリ用の非常に単純なメール システムを作成しています。RESTful認証を使用しています。これはかなり従来的な設定で、ユーザーがサインアップしたときとパスワードを忘れたときに同じメールを送信します。ただ一つ問題があり、頭を抱えきれないようです。

「新規ユーザー」の電子メールはユーザー コントローラーから送信され、「パスワードを忘れた場合」の電子メールはパスワード コントローラーから送信されますが、両方のインスタンスで同じ電子メール テンプレートを使用したいと考えています。

メールは次のようになります。

<%=h @user.name %>, 
Your membership details:
Username: <%=h @user.login %>
Password: <%=h @user.password %>

ユーザーがサインアップすると、これは問題なく機能し、次のようなメールが送信されます。

  Bryan,
  Your membership details:
  Username: bryan
  Password: password

残念ながら、このテンプレートを使用してパスワード コントローラーから「パスワードを忘れた場合」電子メールを送信しようとすると、すべてが壊れてしまいます。しかし、私を困惑させているのは、それが単に壊れているだけであるということです。

  Bryan,
  Your membership details:
  Username: bryan
  Password: 

つまり、@user.name は @user.login と同様に引き続き有効です。しかし、この状態では何らかの理由で @user.password が届きません。

ご回答ありがとうございます。はっきり言っておきますが、この場合セキュリティは実際には問題ではありません。そのため、パスワードをリセットするプロセスを経るよりも、忘れたパスワードをプレーンテキストで送信できる方が良いのですが、これはありがたいことです。通常はそうではありません。

役に立ちましたか?

解決

これはあなたのコードの一部、特にコントローラのメソッドを見ずに言うのは難しいのです。

これは、それが暗号化される前のサインアップメールはパスワードを使用しているものの可能です。それはDBに暗号化され保存されているので、暗号化されていないパスワードは、一般的に、後のアクションには使用できません。

しかし、パスワードのコントローラが新しいパスワードを設定するのではなく、古いものを取得しようとしている場合は、

、問題は別の場所で最も可能性があります。

とにかく、それは1のコードを見ずに行うことができますと同じくらい多くの推測だ。

他のヒント

私もサラ・メイさんの意見に同意します。これは、restful auth によるパスワードの保存方法が原因です。一般的に attr_accessor :password ユーザー モデルでは、サインアップ時に使用されるパスワードの仮想属性を設定します。サインアップ段階では、ユーザー オブジェクトにはパスワード属性が設定されていますが、後でユーザー レコードを取得しようとすると、パスワード フィールドは空白になります。

とにかく、それが「最善の」方法だとは思いません。元のパスワードではなく、パスワードをリセットできるリンクを送信してください。パスワードを一度忘れてしまった場合、再び忘れないようにするものは何でしょうか。

データベースを見ると、

パスワードのハッシュと塩のハッシュが表示されます。

あなたがActiveMailerにそれを渡すと、電子メールで暗号化せずに送信することができ平文パスワードを使用して、別の変数を使用して、データベースに格納する前に別の変数で平文パスワードを保存する必要があります。

@user = User.find(params[:id])
password = params[:user][:password]
options = {
    :password => password,
    :user => @user
}

if @user.update_attributes(params[:user]) and Mailer.deliver_reset(options)
    flash[:notice] = "Check your email (#{@user.email}) for your new password."
    redirect_to_back_or_default('/')
else
    flash[:error] = "Look at the errors below"
end

これはやめてください

多くのユーザーは同じパスワードを複数の場所で使用しています (もちろん、使用すべきではありませんが、実際に使用しています)。パスワードを平文で保存すると、サイトのセキュリティだけでなく、他のサイトのユーザーのセキュリティも危険にさらされます。また、パスワードを平文で電子メールで送信することも始めないでください。

ここの他の人が提案しているように、「パスワードはこちらです」システムではなく、パスワードリセットシステムを使用してください。

私はあなたがを故意になるように、パスワードはハッシュ化された形式で格納されていることを推測している。のユーザーのパスワードを知ることはできません。ユーザーがパスワードは、ユーザーにリンクを送信するために数日間のみ有効です忘れたときに何をする必要があるか、それはユーザーが古いものを知らなくてもパスワードをリセットできるようになる。

scroll top