2016-05-10 22 views
0

私たちはCakePHPコードベースとスキーマを継承しています。それをLaravel 5.2.xに移植しますが、電子メールではなくスキーマでユーザー名を使用するスキーマを維持する必要があります。だから私は代わりにユーザー名列を使用して動作するようにパスワードをリセットしようとしています。Laravel 5.2.x電子メールとしてユーザー名を使用するパスワードブローカー列名

ユーザーが認証されることができるので、私はそれを上書きして、代わりに電子メールのユーザー名に検証、およびsendResetLinkにユーザ名を渡しPasswordControllerに:: sendResetLinkEmail ResetPasswordsに引っ張ってきた:

public function sendResetLinkEmail(Request $request) 
{ 
    $this->validate($request, [ 
     'username' => 'required|email', 
    ]); 

    $broker = $this->getBroker(); 

    $response = Password::broker($broker)->sendResetLink(
     $request->only('username'), $this->resetEmailBuilder() 
    ); 

    // ... 

をしかし、それをPasswordBrokerに〜91行にメソッドを呼び出した後にエラーがスローされます:

$token = $this->tokens->create($user); // line 91 

は今、私はそれは依存性がPasswordBrokerに注入されたインターフェースを呼び出すように見えるので、これは行く見当がつかないが、それはresponsiですパスワードリセットの記録を保存するためのble。

答えて

0

さて、多くの騒ぎの後、私はそれを理解しました。代わりに、パスワードリセットのための電子メールを使用しての意味列名を保つために:

は、2つのステップがあります:あなたはあなたのPasswordControllerにResetsPasswords::sendResetLinkEmailを引き上げ、それが検証しにユーザー名を渡す持っている必要があります

1)問題のですが、また、完全を期すために以下に含まsendResetLink、:

/** 
* Send a reset link to the given user. 
* 
* @param \Illuminate\Http\Request $request 
* @return \Illuminate\Http\Response 
*/ 
public function sendResetLinkEmail(Request $request) 
{ 
    $this->validate($request, [ 
     'username' => 'required|email', 
    ]); 

    $broker = $this->getBroker(); 

    $response = Password::broker($broker)->sendResetLink(
     $request->only('username'), $this->resetEmailBuilder() 
    ); 

    switch ($response) { 
     case Password::RESET_LINK_SENT: 
      return $this->getSendResetLinkEmailSuccessResponse($response); 

     case Password::INVALID_USER: 
     default: 
      return $this->getSendResetLinkEmailFailureResponse($response); 
    } 
} 

2)まだ把握するまでに時間がかかるように見えたこのための鍵は、自然の中で非常に単純化しているが、完全に文書化されていない限り私が知ることができるのは、ユーザーmで使用されている特性を変更することですCanResetPassword::getEmailForPasswordResetあなたはCanResetPassword以内に上書きしたくない代わり、電子メールのユーザー名を使用するodelは、私はUserモデルから形質を削除し、アプリケーションの名前空間内での自分自身のコピーを適用:

今することができます
namespace App\Traits\Auth; 

trait CanResetPassword 
{ 
    /** 
    * Get the e-mail address where password reset links are sent. 
    * 
    * @return string 
    */ 
    public function getEmailForPasswordReset() 
    { 
     return $this->username; 
    } 
} 

パスワードリセットリンクを送信し、パスワードをリセットします。お役に立てれば。

関連する問題