2016-11-17 20 views
0

私はLaravel 5.3Laravel 5.3のAjaxログインのカスタマイズの資格

にAjaxを経由してログインすることができていますこれは、簡単に適切なパラメータを使用してログインルートへのポスト要求を行うことによって達成されます。

しかし、私のアプリケーションのために、私は、ログインするユーザーのための2つの方法を設計しています - 伝統的なメール/パスワード経由でLaravelはすでにサポート組み合わせを、分散されるだろうアクセスコード経由を前記コードの所有者が電子メール/パスワードの組み合わせなしでログインすることを可能にする。私のアプリには「登録」はありません。認証のレベルがちょうど異なるだけです。とにかく

/vendor/laravel/framework/src/Illuminate/Foundation/Authに私はAuthenticatesUsers.phpを編集すると、この機能は、特にログイン試行を処理することを理解しています:

protected function attemptLogin(Request $request) 
    { 
     return $this->guard()->attempt(
      $this->credentials($request), $request->has('remember') 
     ); 
    } 

私の質問は、私は、要求の内容に基づいてattempt()の成功を変更することができる方法であり、 ?

つまり、誰かがajaxアクセスコードを送信している場合、明らかに失敗するため、電子メールとパスワードの組み合わせに対してテストするべきではありません。同様に、電子メール/パスワードパラメータを含むajaxを送信している場合、利用可能なアクセスコードのリストに対してテストするべきではありません。

私は適切なトラックにいますか? Laravelで私はAuth::attempt()リクエストパラメタを条件にすることができますか?

+0

私はフレームワークファイルを編集するためのアドバイスはしません。 https://laravel.com/docs/5.2/authentication#authenticating-usersというマニュアルを手動で認証する方法については、完全な節があります。また、あなたのajax呼び出しをチェックするには、ミドルウェア/ Authenticate.phpの行番号 '38'を見てください。 –

答えて

0

フレームワークファイルの編集に関するアドバイスはしません。 コントローラに送信する前に、要求している認証の種類の識別を処理するためのミドルウェアを作成する必要があります。あなたのミドルウェアで、

public function handle($request, Closure $next) 
{ 
    // check if the request has access_code 
    $request->attributes->add(['using_access_code' => $request->has('access_code')]); 
    return $next($request); 
} 

そして、あなたのコントローラでは、あなたはもちろん、直接この内部コントローラを行うことができます(私たちは、新たに追加されたこのリクエストパラメータに正のテストのためにチェックすることができますが、私個人的には、ミドルウェアなどは、この理由を処理するために、あなたはusing_access_codeがfalseの場合は、お使いのコントローラで)

をより多くの機能を追加することも可能性があり、他に、attempt()ログインを続行access_codeを使用してユーザーを検索し、手動でAuth::login($user)を使用してユーザーを認証します。あなたが不明な場合は教えてください。

+0

私はミドルウェアソリューションに精通していません。代わりがありますか? –

関連する問題