2017-05-03 7 views
0

사용자는 email address을 사용하거나 mobile을 사용하여 Google의 laravel 응용 프로그램에 로그인 할 수있는 기능을 추가하고자합니다. 동일한 작업을 수행 할 수 없습니다. 한 가지 방법이 있지만 업체 폴더 내에 있으므로 쉽게 삭제할 수 있습니다.모바일이나 이메일로 로그인 laravel 5.3

공급 업체 폴더 경로vendor/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php

<?php 

namespace Illuminate\Foundation\Auth; 

use Illuminate\Http\Request; 
use Illuminate\Support\Facades\Auth; 
use Illuminate\Support\Facades\Lang; 

trait AuthenticatesUsers 
{ 
    use RedirectsUsers, ThrottlesLogins; 


    /** 
    * Show the application's login form. 
    * 
    * @return \Illuminate\Http\Response 
    */ 
    public function showLoginForm() 
    { 
     return view('auth.login'); 
    } 

    /** 
    * Handle a login request to the application. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @return \Illuminate\Http\Response 
    */ 
    public function login(Request $request) 
    { 
     $this->validateLogin($request); 
     // If the class is using the ThrottlesLogins trait, we can automatically throttle 
     // the login attempts for this application. We'll key this by the username and 
     // the IP address of the client making these requests into this application. 
     if ($this->hasTooManyLoginAttempts($request)) { 
      $this->fireLockoutEvent($request); 
      return $this->sendLockoutResponse($request); 
     } 

     if ($this->attemptLogin($request)) { 

      return $this->sendLoginResponse($request); 
     } 
     // If the login attempt was unsuccessful we will increment the number of attempts 
     // to login and redirect the user back to the login form. Of course, when this 
     // user surpasses their maximum number of attempts they will get locked out. 
     $this->incrementLoginAttempts($request); 

     return $this->sendFailedLoginResponse($request); 
    } 

    /** 
    * Validate the user login request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @return void 
    */ 
    protected function validateLogin(Request $request) 
    { 
     $this->validate($request, [ 
      $this->username() => 'required', 'password' => 'required', 
     ]); 
    } 

    /** 
    * Attempt to log the user into the application. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @return bool 
    */ 
    protected function attemptLogin(Request $request) 
    { 
     // return $this->guard()->attempt( 
     //  $this->credentials($request), $request->has('remember') 
     //); 
     if (Auth::attempt([ 
      'mobile' => $request['username'], 
      'password' => $request['password'] 
      ],$request->has('remember')) 
      || Auth::attempt([ 
      'email' => $request['username'], 
      'password' => $request['password'] 
      ],$request->has('remember'))){ 
       return true; 
     } 
     return false; 
    } 

    /** 
    * Get the needed authorization credentials from the request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @return array 
    */ 
    protected function credentials(Request $request) 
    {  
     return $request->only($this->username(), 'password'); 
    } 

    /** 
    * Send the response after the user was authenticated. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @return \Illuminate\Http\Response 
    */ 
    protected function sendLoginResponse(Request $request) 
    { 
     $request->session()->regenerate(); 

     $this->clearLoginAttempts($request); 

     return $this->authenticated($request, $this->guard()->user()) 
       ?: redirect()->intended($this->redirectPath()); 
    } 

    /** 
    * The user has been authenticated. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param mixed $user 
    * @return mixed 
    */ 
    protected function authenticated(Request $request, $user) 
    { 
     // 
    } 

    /** 
    * Get the failed login response instance. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @return \Illuminate\Http\RedirectResponse 
    */ 
    protected function sendFailedLoginResponse(Request $request) 
    { 
     return redirect()->back() 
      ->withInput($request->only($this->username(), 'remember')) 
      ->withErrors([ 
       $this->username() => Lang::get('auth.failed'), 
      ]); 
    } 

    /** 
    * Get the login username to be used by the controller. 
    * 
    * @return string 
    */ 
    public function username() 
    { 
     return 'username'; 
    } 

    /** 
    * Log the user out of the application. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @return \Illuminate\Http\Response 
    */ 
    public function logout(Request $request) 
    { 
     $this->guard()->logout(); 

     $request->session()->flush(); 

     $request->session()->regenerate(); 

     return redirect('/'); 
    } 

    /** 
    * Get the guard to be used during authentication. 
    * 
    * @return \Illuminate\Contracts\Auth\StatefulGuard 
    */ 
    protected function guard() 
    { 
     return Auth::guard(); 
    } 
} 

답변

0

이는 특성, 그리고 당신의 인증 컨트롤러는이 특성을 사용합니다. 따라서 원하는 것을 얻기 위해 attemptLogin 메서드를 무시할 수 있습니다.

이 경우 모바일 번호 또는 전자 메일 사용 여부를 결정하는 논리가 해당 방법에 해당합니다.

편집 귀하의 의견을 바탕으로

, 당신은 실제로 대신 공급 업체 파일을 수정하는, app/Http/Controllers/Auth/LoginController.phpattemptLogin 방법을 복사해야합니다.

이미 논리가 진행중인 것 같습니다. 그렇게 처리해야합니다.

+0

당신은, 간단한 예 : – fewBugs

+0

내 대답을 편집하는 방법을 말해 줄 수 – Mozammil

0

AuthenticatesUers.php에 대한 맞춤 특성을 추가 할 수 있습니다.

단계 1) app/traits 폴더에 CustomAuthenticatesUsers.php라는 특성을 만듭니다.

<?php 

namespace App\Traits; 

use Illuminate\Http\Request; 
use Illuminate\Support\Facades\Auth; 
use Illuminate\Support\Facades\Lang; 
use Illuminate\Foundation\Auth\RedirectsUsers; 
use Illuminate\Foundation\Auth\ThrottlesLogins; 

trait CustomAuthenticatesUsers 
{ 
    use RedirectsUsers, ThrottlesLogins; 

    /** 
    * Show the application's login form. 
    * 
    * @return \Illuminate\Http\Response 
    */ 
    public function showLoginForm() 
    { 
     if(!session()->has('url.intended')) 
     { 
      session(['url.intended' => url()->previous()]); 
     } 

     return view('auth.login'); 
    } 

    /** 
    * Handle a login request to the application. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @return \Illuminate\Http\Response 
    */ 
    public function login(Request $request) 
    { 
     $this->validateLogin($request); 

     // If the class is using the ThrottlesLogins trait, we can automatically throttle 
     // the login attempts for this application. We'll key this by the username and 
     // the IP address of the client making these requests into this application. 
     if ($this->hasTooManyLoginAttempts($request)) { 
      $this->fireLockoutEvent($request); 

      return $this->sendLockoutResponse($request); 
     } 

     if ($this->attemptLogin($request)) { 
      return $this->sendLoginResponse($request); 
     } 

     // If the login attempt was unsuccessful we will increment the number of attempts 
     // to login and redirect the user back to the login form. Of course, when this 
     // user surpasses their maximum number of attempts they will get locked out. 
     $this->incrementLoginAttempts($request); 

     return $this->sendFailedLoginResponse($request); 
    } 

    /** 
    * Validate the user login request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @return void 
    */ 
    protected function validateLogin(Request $request) 
    { 
     $this->validate($request, [ 
      $this->username() => 'required', 'password' => 'required', 
     ]); 
    } 

    /** 
    * Attempt to log the user into the application. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @return bool 
    */ 
    protected function attemptLogin(Request $request) 
    { 
     // return $this->guard()->attempt( 
     //  $this->credentials($request), $request->has('remember') 
     //); 
     if (Auth::attempt([ 
      'mobile' => $request['username'], 
      'password' => $request['password'] 
      ],$request->has('remember')) 
      || Auth::attempt([ 
      'email' => $request['username'], 
      'password' => $request['password'] 
      ],$request->has('remember'))){ 
       return true; 
     } 
     return false; 
    } 

    /** 
    * Get the needed authorization credentials from the request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @return array 
    */ 
    protected function credentials(Request $request) 
    { 
     return $request->only($this->username(), 'password'); 
    } 

    /** 
    * Send the response after the user was authenticated. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @return \Illuminate\Http\Response 
    */ 
    protected function sendLoginResponse(Request $request) 
    { 
     $request->session()->regenerate(); 

     $this->clearLoginAttempts($request); 

     return $this->authenticated($request, $this->guard()->user()) 
       ?: redirect()->intended($this->redirectPath()); 
    } 

    /** 
    * The user has been authenticated. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param mixed $user 
    * @return mixed 
    */ 
    protected function authenticated(Request $request, $user) 
    { 
     // 
    } 

    /** 
    * Get the failed login response instance. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @return \Illuminate\Http\RedirectResponse 
    */ 
    protected function sendFailedLoginResponse(Request $request) 
    { 
     return redirect()->back() 
      ->withInput($request->only($this->username(), 'remember')) 
      ->withErrors([ 
       $this->username() => Lang::get('auth.failed'), 
      ]); 
    } 

    /** 
    * Get the login username to be used by the controller. 
    * 
    * @return string 
    */ 
    public function username() 
    { 
     return 'username'; 
    } 

    /** 
    * Log the user out of the application. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @return \Illuminate\Http\Response 
    */ 
    public function logout(Request $request) 
    { 
     $this->guard()->logout(); 

     $request->session()->flush(); 

     $request->session()->regenerate(); 

     return redirect('/'); 
    } 

    /** 
    * Get the guard to be used during authentication. 
    * 
    * @return \Illuminate\Contracts\Auth\StatefulGuard 
    */ 
    protected function guard() 
    { 
     return Auth::guard(); 
    } 
} 

2 단계) LoginController.php에 다음 코드를 추가

<?php 

namespace App\Http\Controllers\Auth; 

use App\Http\Controllers\Controller; 
use App\Traits\CustomAuthenticatesUsers; 

class LoginController extends Controller 
{ 
    /* 
    |-------------------------------------------------------------------------- 
    | Login Controller 
    |-------------------------------------------------------------------------- 
    | 
    | This controller handles authenticating users for the application and 
    | redirecting them to your home screen. The controller uses a trait 
    | to conveniently provide its functionality to your applications. 
    | 
    */ 

    use CustomAuthenticatesUsers; 

    /** 
    * Where to redirect users after login. 
    * 
    * @var string 
    */ 
    protected $redirectTo = '/'; 

    /** 
    * Create a new controller instance. 
    * 
    * @return void 
    */ 
    public function __construct() 
    { 
     $this->middleware('guest', ['except' => 'logout']); 
    } 
}