2016-06-12 13 views
0

私はLaravelにおける新たなんだと私は、電子メール(少数派)、または自分の電話番号(過半数)のいずれかでログインするユーザーを必要とするアプリケーションを開発しています。現在、ユーザーが電話番号を提供できるように、変更された登録でデフォルトのLaravel認証を使用しています。私が見つけた解決策は、電子メールではなくユーザー名でログインする方法を示しています。どのように私はこれを達成することができますか?私はここではPHP 7.0Laravel 5.2で、電子メールや電話のいずれかでログイン

でLaravel 5.2を実行している私のUserモデルである:ここで

protected $fillable = ['firstname', 'lastname', 'email','phone','account_type','county','sub_county', 'password',]; 

protected $hidden = ['password', 'remember_token',]; 

は私AuthenticateUsers.phpです:私のログインフォームで

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

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

/** 
* Get the login username to be used by the controller. 
* 
* @return string 
*/ 
public function loginUsername() 
{ 
    return property_exists($this, 'username') ? $this->username : 'email'; 
} 

メール入力フィールド:

あなたの loginUsername機能で
<div class="form-group{{ $errors->has('email') ? ' has-error' : '' }}"> 
<label class="col-md-4 control-label">E-Mail Address</label> 
<div class="col-md-6"> 
<input type="text" class="form-control" name="email" value="{{ old('email') }}"> 

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

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

答えて

0

、リクエストが持っているかどうかを確認するには、以下の変更を行います電子メールのデフォルトを使用する前に、電話機のプロパティ。

public function loginUsername($request) { return $request->has('phone') ? 'phone' : 'email'; }

+0

'loginUsername()'メソッドは、それが呼び出すメソッドで利用可能ですので、あなたは 'loginUsername'メソッドに要求インスタンスを渡すことができ – jszobody

+0

あなたがそこにそれを持っている方法request' $'へのアクセス権を持っていません'AuthenticateUsers'クラスのものです。 –

+0

'$ request'パラメータを' loginUsername() '関数に渡しました。また、ThrottlesLogins.phpで' protected function getThrottleKey(Request $ request)を変更しました。 { return mb_strtolower($ request-> input ($ this-> loginUsername($ request)))。 '|'。$ request-> ip(); } '。私は自分のメールアドレスでログインすることができました。電話入力を受け入れるように**ビュー/モデル/コントローラ**を変更するにはどうすればよいですか? @Oluwafemi – Ben100

関連する問題