Heim  >  Artikel  >  Backend-Entwicklung  >  So lösen Sie Laravel, um die Benutzerauthentifizierung mit mehreren Feldern zu implementieren

So lösen Sie Laravel, um die Benutzerauthentifizierung mit mehreren Feldern zu implementieren

不言
不言Original
2018-06-13 16:46:04930Durchsuche

Dieser Artikel stellt hauptsächlich vor, wie man das Problem der Mehrfeld-Benutzerauthentifizierung in Laravel löst. Jetzt kann ich ihn mit Ihnen teilen.

Ich Ich habe kürzlich jemanden bei der Arbeit getroffen, der schließlich durch die Suche nach relevanten Informationen gelöst wurde. Der folgende Artikel stellt hauptsächlich die Lösung vor, wie Laravel die Benutzer-Mehrfeldauthentifizierung implementiert Code. Freunde, die ihn brauchen. Sie können ihn als Referenz verwenden. Schauen wir uns den Code unten an.

Vorwort

Dieser Artikel stellt hauptsächlich den relevanten Inhalt zur Laravel-Benutzer-Mehrfeldauthentifizierung vor und teilt ihn als Referenz und zum Studium Folgende Worte Mehr gibt es nicht zu sagen, werfen wir einen Blick auf die ausführliche Einleitung.

Lösung:

  • Nicht mehr als zwei Login-Felder (einfache Lösung)

  • Anmeldefelder sind größer oder gleich drei (relativ kompliziert)

Anmeldefelder sind nicht mehr als zwei

Ich habe online eine relativ einfache Lösung gesehen, die jedoch nicht die Validierung aller beiden Felder löst:

filter_var($request->input('login'), FILTER_VALIDATE_EMAIL) ? 'email' : 'name'

Filtern Sie den Formularinhalt in der Anfrage, um den Benutzernamen zu unterscheiden. Die Nachteile liegen auf der Hand. Wenn die andere keine E-Mail ist, werden Sie geblendet ... Hier ist eine weitere allgemeine Lösung:

Die Anmeldemethode in LoginController neu schreiben

public function login(Requests $request) {
 //假设字段是 email
 if ($this->guard()->attempt($request->only('email', 'password'))) {
  return $this->sendLoginResponse($request);
 }

 //假设字段是 mobile
 if ($this->guard()->attempt($request->only('mobile', 'password'))) {
  return $this->sendLoginResponse($request);
 }

 //假设字段是 username
 if ($this->guard()->attempt($request->only('username', 'password'))) {
  return $this->sendLoginResponse($request);
 }

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

Sie sehen, dass es zwar das Problem lösen kann, aber offensichtlich im Widerspruch zum eleganten Stil von Laravel steht und so viele Probleme ausverkauft hat mit dir.

Anmeldefelder größer oder gleich drei (relativ kompliziert)

Zuerst müssen Sie selbst eine Implementierung von IlluminateContractsAuthUserProvider implementieren. Weitere Informationen finden Sie unter Hinzufügen eines benutzerdefinierten Benutzeranbieters. aber ich mag es, faul zu sein, erbt direkt EloquentUserProvider und schreibt die RetrieByCredentials-Methode neu:

public function retrieveByCredentials(array $credentials)
{
 if (empty($credentials)) {
  return;
 }

 // First we will add each credential element to the query as a where clause.
 // Then we can execute the query and, if we found a user, return it in a
 // Eloquent User "model" that will be utilized by the Guard instances.
 $query = $this->createModel()->newQuery();

 foreach ($credentials as $key => $value) {
  if (! Str::contains($key, 'password')) {
   $query->orWhere($key, $value);
  }
 }

 return $query->first();
}

Hinweis: wird $query->where($key, $value); Ändern Sie es in $query->orWhere($key, $value); und das war's!

Dann müssen Sie einen benutzerdefinierten UserProvider registrieren:

class AuthServiceProvider extends ServiceProvider
{
 /**
  * 注册任何应用认证/授权服务。
  *
  * @return void
  */
 public function boot()
 {
  $this->registerPolicies();

  Auth::provider('custom', function ($app, array $config) {
   // 返回 Illuminate\Contracts\Auth\UserProvider 实例...

   return new CustomUserProvider(new BcryptHasher(), config('auth.providers.custom.model'));
  });
 }
}

Zuletzt ändern wir die Konfiguration von auth.php und fertig :

'providers' => [
 'users' => [
  'driver' => 'eloquent',
  'model' => App\Models\User::class,
 ],

  'custom' => [
   'driver' => 'custom',
   'model' => App\Models\User::class,
  ],
],

Ändern Sie den Anbieter des Web-Arrays auf den zuvor registrierten Benutzerdefiniert

'guards' => [
 'web' => [
  'driver' => 'session',
  'provider' => 'custom',
 ],

 'api' => [
  'driver' => 'passport',
  'provider' => 'users',
 ],
],

Jetzt ist alles in Ordnung, auch wenn Sie mehrere Felder haben...

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass er für das Lernen aller hilfreich ist die chinesische PHP-Website!

Verwandte Empfehlungen:

Über die Methode zur Implementierung der Mehrfeld-Anmeldung in Laravel5.4

Das obige ist der detaillierte Inhalt vonSo lösen Sie Laravel, um die Benutzerauthentifizierung mit mehreren Feldern zu implementieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn