2016-12-21 2 views
1

Laravel 5.3を使用して小さなアプリを作成しています。私はLaravelのデフォルトのAuthにユーザーのアクティベーションを(電子メールの確認で)適用しました。しかし、アカウントやユーザーが電子メールアドレスを確認して起動していないと、パスワードリセットリンクの送信を停止する方法が見つかりませんでした。現在、ユーザーがアカウントを作成し、パスワードリセットリンクを使用してログインできるメールアドレスを確認していない場合。パスワードを送信する前にユーザーが有効になっているかどうかを確認するパスワードを忘れた場合

私は、ユーザーテーブルできたもの

この

public function up() 
{ 
    Schema::create('users', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->string('name')->nullable();; 
     $table->string('username')->unique(); 
     $table->string('email')->unique(); 
     $table->string('company')->nullable();; 
     $table->string('password'); 
     $table->boolean('activated')->default(false); 
     $table->rememberToken(); 
     $table->timestamps(); 
    }); 

    Schema::create('user_activations', function (Blueprint $table) { 
     $table->integer('user_id')->unsigned(); 
     $table->string('token')->index(); 
     $table->timestamp('created_at'); 
    }); 
} 

UPDATE 私は、以下の機能を更新することにより、それを実行しようとしました。しかし、それは5.3で

public function reset(Request $request) 
{ 
    if (!$request->activated) { 
     return redirect('/'); 
    } else { 
     $this->validate($request, $this->rules(), $this->validationErrorMessages()); 

     $response = $this->broker()->reset(
      $this->credentials($request), function ($user, $password) { 
       $this->resetPassword($user, $password); 
      } 
     ); 

     return $response == Password::PASSWORD_RESET 
        ? $this->sendResetResponse($response) 
        : $this->sendResetFailedResponse($request, $response); 
    } 
} 

答えて

0

私は解決策を見つけました。ちょうど誰かが同じ解決策を探している場合に備えて。ここで私は、それによって任意のコントローラを参照してくださいいけないが、 `ForgotPasswordController.php` iは、`) `SendsPasswordResetEmails`を流したが、任意のは、`(リセット参照いけない

public function sendResetLinkEmail(Request $request) 
{ 
    $this->validate($request, ['email' => 'required|email']); 
    $user_check = User::where('email', $request->email)->first(); 

    if (!$user_check->activated) { 
     return back()->with('status', 'Your account is not activated. Please activate it first.'); 
    } else { 
     $response = $this->broker()->sendResetLink(
      $request->only('email') 
     ); 

     if ($response === Password::RESET_LINK_SENT) { 
      return back()->with('status', trans($response)); 
     } 

     return back()->withErrors(
      ['email' => trans($response)] 
     ); 
    } 
} 
0

を働いていないあなただけのオリジナルのメソッドに簡単なチェックを追加app\Http\Auth\ResetPasswordController

reset()メソッドをオーバーライドする必要があり、何かのように:

if (!$user->activated) { 
    return redirect('/'); 
} 
+0

'アプリ\のHttp \認証\ PasswordController'をオーバーライドする機能があります。方法。私は正確に何を書かなければならないのか説明していただけますか? –

+0

はい、5.3では 'ResetPasswordController'です。 'reset()'メソッドを 'ResetPasswords'特性からコピーして(私の答えの中のリンクをクリックして)コントローラーにコピーして変更する必要があります。 –

+0

私は質問を更新しました。私が間違っていたものが私のために働いていないことを確認できますか? –