>  기사  >  백엔드 개발  >  Laravel을 해결하여 사용자 다중 필드 인증 구현

Laravel을 해결하여 사용자 다중 필드 인증 구현

巴扎黑
巴扎黑원래의
2017-09-14 10:43:301234검색

최근 직장에서 다중 필드 인증이 필요한 문제가 발생하여 관련 정보를 검색하여 해결했습니다. 다음 기사에서는 주로 Laravel이 사용자 다중 필드 인증을 구현하는 방법에 대한 솔루션을 샘플 코드를 통해 소개합니다. . 매우 상세합니다. 필요한 친구가 참조할 수 있습니다. 아래에서 살펴보겠습니다.

머리말

이 글은 주로 Laravel 사용자 다중 필드 인증에 대한 관련 내용을 소개하며 참고 및 학습을 위해 공유합니다. 아래에서는 자세한 내용을 살펴보겠습니다. 소개. SOLUSTION : SIGHT SOLFICE (Simple Solution) 2 개 이상의 로그인 필드 (상대적으로 복잡한)

2 개 이상의 로그인 필드가 없습니다.

  • 인터넷에서 비교적 간단한 솔루션을 보았지만 두 필드의 확인을 모두 해결할 수는 없습니다.

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

    요청의 양식 콘텐츠를 필터링하여 사용자 이름을 구별하세요. 단점은 명백합니다. 다른 하나가 이메일이 아니면 눈이 멀게 됩니다... 또 다른 일반적인 해결책은 다음과 같습니다.

LoginController에서 로그인 방법을 다시 작성하세요

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);
}

문제가 있음을 알 수 있습니다. 하지만 이는 분명히 Laravel의 우아한 스타일에 어긋나므로 많은 어려움을 겪은 후 해결책을 여러분과 공유하겠습니다.

로그인 필드가 3개 이상인 경우(상대적으로 복잡함)

먼저 IlluminateContractsAuthUserProvider 구현을 직접 구현해야 합니다. 자세한 내용은 맞춤 사용자 공급자 추가를 참조하세요. 그래서 EloquentUserProvider를 직접 상속하고 RetrieveByCredentials 메소드를 다시 작성했습니다:

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();
}

참고:

replace

!


그런 다음 사용자 정의 UserProvider를 등록해야 합니다.

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'));
  });
 }
}

마지막으로 auth.php의 구성을 수정하면 완료됩니다.

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

  'custom' => [
   'driver' => 'custom',
   'model' => App\Models\User::class,
  ],
],
웹 배열 공급자를 등록된 사용자 정의 공급자로 변경합니다. 이전 $query->where($key, $value); 改为 $query->orWhere($key, $value);

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

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

이제 필드가 여러 개 있어도...

위 내용은 Laravel을 해결하여 사용자 다중 필드 인증 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.