2017-06-01 6 views
1

私はeコマースアプリケーションを開発中で、laravelの認証を使用しています。それは私にすべてのlogin/register/resetpasswordロジックとビューを与えます。ログインと登録はうまくいきましたが、リセットビューでエラーが表示されています。ビューをリセットします。Laravelのパスワードリセットエラー

@extends('layouts.app') 

@section('content') 
<div class="container"> 
    <div class="row"> 
     <div class="col-md-8 col-md-offset-2"> 
      <div class="panel panel-default"> 
       <div class="panel-heading">Reset password</div> 

       <div class="panel-body"> 
        @if (session('status')) 
         <div class="alert alert-success"> 
          {{ session('status') }} 
         </div> 
        @endif 

        <form class="form-horizontal" role="form" method="POST" action="{{ route('password.request') }}"> 
         {{ csrf_field() }} 

         <input type="hidden" name="token" value="{{ $token }}"> 

         <div class="form-group{{ $errors->has('email') ? ' has-error' : '' }}"> 
          <label for="email" class="col-md-4 control-label">E-mail</label> 

          <div class="col-md-6"> 
           <input id="email" type="email" class="form-control" name="email" value="{{ $email or old('email') }}" required autofocus> 

           @if ($errors->has('email')) 
            <span class="help-block"> 
             <strong>{{ $errors->first('email') }}</strong> 
            </span> 
           @endif 
          </div> 
         </div> 

         <div class="form-group{{ $errors->has('password') ? ' has-error' : '' }}"> 
          <label for="password" class="col-md-4 control-label">Password</label> 

          <div class="col-md-6"> 
           <input id="password" type="password" class="form-control" name="password" required> 

           @if ($errors->has('password')) 
            <span class="help-block"> 
             <strong>{{ $errors->first('password') }}</strong> 
            </span> 
           @endif 
          </div> 
         </div> 

         <div class="form-group{{ $errors->has('password_confirmation') ? ' has-error' : '' }}"> 
          <label for="password-confirm" class="col-md-4 control-label">Confirm password</label> 
          <div class="col-md-6"> 
           <input id="password-confirm" type="password" class="form-control" name="password_confirmation" required> 

           @if ($errors->has('password_confirmation')) 
            <span class="help-block"> 
             <strong>{{ $errors->first('password_confirmation') }}</strong> 
            </span> 
           @endif 
          </div> 
         </div> 

         <div class="form-group"> 
          <div class="col-md-6 col-md-offset-4"> 
           <button type="submit" class="btn btn-primary"> 
            Reset password 
           </button> 
          </div> 
         </div> 
        </form> 
       </div> 
      </div> 
     </div> 
    </div> 
</div> 
@endsection 

私がログインしていないよ場合は、私が手:次のコードでトークン:未定義の変数を

<input type="hidden" name="token" value="{{ $token }}"> 

をしかし、私はログインしていたときに私はエラーはありませんが、単に私をホームページにリダイレクトします。私はそれがミドルウェアのためでなければならないことは分かっていますが、ログに記録されたユーザーが「パスワードリセット」ビューにアクセスできないことは意味がありません。どんなイデオリア?

TL; DR

認証ルート(パスワードのリセット):

Route::group(['namespace' => 'Auth'], function() { 
    Route::get('/reset', '[email protected]'); 
}); 

パスワードのリセット・コントローラ:

<?php 

namespace App\Http\Controllers\Auth; 

use App\Http\Controllers\Controller; 
use Illuminate\Foundation\Auth\ResetsPasswords; 

class ResetPasswordController extends Controller 
{ 

    use ResetsPasswords; 


    protected $redirectTo = '/home'; 


    public function __construct() 
    { 
     $this->middleware('guest'); 
    } 

    public function getPasswordResetView() 
    { 
     return view("auth/passwords/reset"); 
    } 
} 
+0

まともな回答が必要な場合は、コントローラとルータのコードを追加する必要があります –

+0

パスワードリセットで '$ token'を印刷しましたか? –

+0

私は質問に詳細を追加します – Diego

答えて

2

あなたは間違った視点を使用しています。ビューreset.blade.phpは、ユーザーが電子メールのリセットリンクをクリックしたときに、パスワードリセットページを表示するために使用されます。あなたが探しているのはemail.blade.phpビューで、ユーザーがパスワードをリセットするために電子メールを入力できるパスワードリセットフォームを示しています。

これらは、パスワードのリセット要求ルートがにshowLinkRequestFormメソッドを使用しています

$this->get('password/reset', 'Auth\[email protected]')->name('password.request'); 
$this->get('password/reset/{token}', 'Auth\[email protected]')->name('password.reset'); 

認証ルートで構築されています。

public function showLinkRequestForm() 
{ 
    return view('auth.passwords.email'); 
} 

メールパスワードリセットルートはResetPasswordControllershowResetFormメソッドを使用しています。

public function showResetForm(Request $request, $token = null) 
{ 
    return view('auth.passwords.reset')->with(
     ['token' => $token, 'email' => $request->email] 
    ); 
} 

あなたが$tokenを見ることができるようにはリセットのリンクから受け取った値に基づいて、コントローラによって設定されます。

これらの2つのルートもguestミドルウェアを使用します。つまり、ログインしていないときにだけ表示することができます。すでにログインしているときにアクセスしようとすると、guestミドルウェア以外のRedirectIfAuthenticatedミドルウェアに設定されたルートにリダイレクトされます。

+0

今私は参照してください。私はlaravelの電子メール/パスワードリセットビューを使用するログに記録されたユーザーのパスワード変更リンクを作成しようとしていました。しかし、ユーザーがログインしているときにホームページにリダイレクトすると、この機能に新しいミドルウェアを実装する必要がありますか?その後、ログに記録されたユーザーは、自分の電子メールを送信してパスワードを変更し、パスワードをリセットした電子メールを生成することができます。 – Diego

+0

リセットページは完全に異なっています。再利用できるのはフォームだけです。ユーザーのパスワード変更オプションの別のビューを作成する方がよいでしょう。 – Sandeesh

0

あなたが考えているパスワードのリセットビューは、パスワードを忘れた場合のリセットされますだから、あなたがすでにログインしているときに自宅をリダイレクトする理由です。

あなたが取得しているkenエラーは、Laravelがパスワードリセット電子メールで生成するトークンリンクに従っていない可能性が高いためです。

+0

ああ、私はそれが "電子メール"ビューを使用する必要がありますし、 "リセット"ビュー右ではないことを知っていますか? しかし、私はログイン中に "リセット"ビューを使用しようとしましたが、まだホームページにリダイレクトされます – Diego

関連する問題