최근 직장에서 다중 필드 인증이 필요한 문제가 발생하여 관련 정보를 검색하여 해결했습니다. 다음 기사에서는 주로 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();
}
참고:
!
그런 다음 사용자 정의 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')); }); } }
'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 중국어 웹사이트의 기타 관련 기사를 참조하세요!