Я пытаюсь создать эффективный обратный вызов для обработки запросов аутентификации в Lumen 5.2. Однако бизнес-логика становится грязной, и это не то, что мне нравится.
Можно ли построить что-то, что делает то же самое viaRequest
но с изолированным классом, который обрабатывает запросы?
Это мое AuthServiceProvider.php
код:
public function boot()
{
[...]
$this->app['auth']->viaRequest('api', function ($request) {
$typeOfLogins = ['password', 'oauth'];
switch ($request->input('type'))
{
case 'password':
{
$user = AuthenticatingUser::where([
'email' => $request->input('email')
])->first();
if (! $user || ! $user->authenticable || ! ($user->authenticable instanceof \Core\Entities\User)) {
return null;
}
return ($this->app['hash']->check($request->input('password'), $user->authenticable->password))
? $user
: null;
}
case 'oauth':
{
$user = AuthenticatingUser::where([
'email' => $request->input('email')
])->first();
if (! $user) {
return null;
}
$provider = Provider::where([
'user_id' => $user->id,
'provider' => $request->input('provider'),
'provider_user_id' => $request->input('user_id')
])->first();
$methodName = "verify" . ucfirst($request->input('provider')) . "Token";
$verification = $this->$methodName($request->input('token'), $request->input('user_id'));
if (! $verification) {
return null;
}
return ($provider) ? $user : null;
}
}
});
}
protected function verifyFacebookToken($token, $userId)
{
$facebook = app(\SammyK\LaravelFacebookSdk\LaravelFacebookSdk::class);
try
{
$response = $facebook->get('/me?fields=id,name', $token);
$graphUser = $response->getGraphUser();
return $graphUser->getId() === $userId;
} catch (\Facebook\Exceptions\FacebookResponseException $e) {
return false;
}
}
Задача ещё не решена.
Других решений пока нет …