2016-06-11 6 views
0

いくつかの類似の質問がありますが、それらはすべて既存の機能を参照していないので不完全なようです。しかし、これらの関数が存在しない、主にAuthControllerから機能を変更するためにそれらのすべてが提示されているソリューションではLaravel 5 Auth active members

Check for active user state with laravel

Login only if user is active using Laravel

extend laravel 5 built-in authentication to login only "if user == active"

私はを参照しています。

私はLaravel(5.2)の最新バージョンを使用していますので、私のデフォルトでは、ファイルを述べたようになっています。今https://github.com/laravel/laravel/blob/master/app/Http/Controllers/Auth/AuthController.php

、どのように私はこの機能を実装するのですか?私はそのAuthControllerファイルにpublic function postLogin()(これらの他の投稿に示唆されているように)をコピーしようとしました。何も変わっていません。

私は明らかに何かが不足しています。

誰か助けてください!

編集: 私が追加した機能は次のとおりです。AuthController

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

$credentials = $this->getCredentials($request); 

// This section is the only change 
if (Auth::validate($credentials)) { 
    $user = Auth::getLastAttempted(); 
    if ($user->active) { 
     Auth::login($user, $request->has('remember')); 
     return redirect()->intended($this->redirectPath()); 
    } else { 
     return redirect($this->loginPath()) // Change this to redirect elsewhere 
      ->withInput($request->only('email', 'remember')) 
      ->withErrors([ 
       'active' => 'You must be active to login.' 
      ]); 
    } 
} 

return redirect($this->loginPath()) 
    ->withInput($request->only('email', 'remember')) 
    ->withErrors([ 
     'email' => $this->getFailedLoginMessage(), 
    ]); 

} 
+0

Authのルートを登録するために 'Route :: auth()'を使用している場合、メソッドは 'login'の' login'ではありません。ルートを確認してください。 – lagbox

+0

私は関数を 'postLogin'から' login'に変更しました。 'Request'について例外が発生し、' Use Illuminate \ Http \ Request'を追加しなければなりませんでした。クラス 'App \ Http \ Controllers \ Auth \ Auth'が見つかりませんでした。 –

+0

これはPHPの名前空間の問題です。 – lagbox

答えて

0

したがって、Laravel 5.2で同じ問題に直面しているすべての人に、認証をphp artisan make:authで提供します。

最初に重要なことは、Route::auth();loginの機能を指していることを理解することであり、postLogin(ありがとう@lagbox!)

次にあなたがAuthControllerを更新する必要があります:

は、ファイルの先頭に追加します。

use Auth; 
use Illuminate\Http\Request; 

use AuthenticatesAndRegistersUsers, ThrottlesLogins;後にどこかに追加します。

/** 
* Where to redirect users if login is unsuccessufull. 
* 
* @var string 
*/ 
protected $loginPath = '/login';` 

と更新されlogin機能を:

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

$credentials = $this->getCredentials($request); 

// This section is the only change 
if (Auth::validate($credentials)) { 
    $user = Auth::getLastAttempted(); 
    if ($user->active) { 
     Auth::login($user, $request->has('remember')); 
     return redirect()->intended($this->redirectPath()); 
    } else { 
     return redirect($this->loginPath) // Change this to redirect elsewhere 
      ->withInput($request->only('email', 'remember')) 
      ->withErrors([ 
       'active' => 'You must be active to login.' 
      ]); 
    } 
} 

return redirect($this->loginPath) 
    ->withInput($request->only('email', 'remember')) 
    ->withErrors([ 
     'email' => $this->getFailedLoginMessage(), 
    ]); 

} 

その後login.blade.phpは新しいエラー@if ($errors->has('active'))

が助けを君たちに感謝を示すように更新する必要があります!

+0

Laravel 5.1に 'postLogin'を追加しました。 –

1

ほとんどの機能がtraitsを使用して追加されます。クラスの先頭に次の行に注意してください。

use AuthenticatesAndRegistersUsers, ThrottlesLogins; 

あなたはAuthenticatesAndRegistersUsersを見れば、あなたはそれがpostLoginメソッドを持っていることがわかります。

なぜこのメソッドを実装しても機能しないのは、メソッドシグネチャに$requestパラメータが指定されていないと思います。

これに当てはまらない場合は、大きなコードスニペットを質問に追加してください。

EDIT:将来のデバッグ用:php artisan route:listは、どのルートがどのメソッドを呼び出すかのリストを提供します。これにより、どのメソッドをオーバーライドするかのヒントが得られます。

+0

代わりに、[AuthenticatesAndRegistersUsers](https://github.com/laravel/framework/blob/5.0/src/Illuminate/Foundation/Auth/)から関数を更新する必要があります。 AuthenticatesAndRegistersUsers.php)? –

+0

いいえ、それを 'AuthController'でオーバーライドする必要があります(可能でなければなりません)。 'AuthenticatesAndRegistersUsers'はあなたのベンダーディレクトリのどこかにあります。あなたは手を加えるべきではありません。なぜなら、変更は作曲家によって無駄に上書きされるからです。 'AuthController'はあなたのプロジェクトのControllersディレクトリ内の素敵なクラスです。これはこのような適応のためのものです。 'AuthenticatesAndRegistersUsers'からメソッドシグネチャ(またはメソッド全体)をコピーするだけです。 – user3389196

+0

まさに!私は、私が追加した関数で質問を更新しました。それ以外に、 'AuthController'ファイルの先頭に' Use Request; 'を追加しました。まだ動作していない理由が分かっていません。 –