Я использую Laravel 5.1 и пытаюсь реализовать вход в свое приложение с помощью LinkedIn. Процесс входа в систему OAuth 2 работает нормально, и мне удалось добавить нового пользователя в таблицу users
с правильными данными. Я также могу зарегистрировать этого пользователя с помощью функции Laravel loginUsingId()
(после нее я вижу \Auth::user()), но это не удается в промежуточном программном обеспечении Authenticate
.
Это функция providerExecute
в моем AuthController
:
public function providerExecute($provider, Request $request, $token)
{
if(!is_null($token)){
session(['invitation_token' => $token]);
}
if (!$request->has('code')) {
return $this->getAuthFirst($provider);
}
$user = Socialite::with($provider)->user();
if ($user) {
$pid = $user->id;
$exists = User::where('email', $user->email)->first();
if ($exists) {
Auth::loginUsingId((int)$exists->id,true); //when dd() the \Auth::user() here - it's returns the user data
return redirect('home');
}
$new_user = new User();
if (session('invitation_token')) {
$invitation = $this->getUserInvitation(session('invitation_token'));
if(!is_null($invitation->client_id)){
$client = Client::findOrFail($invitation->client_id);
if(!$this->canAddUsers($client)){
Log::info('Register from invitation! Client ' . $client->name . ' reached max users count, client id: ' . $client->id);
return response()->view('errors.auth',
['error' => 'Error! Reached users limit, to add more users please upgrade your account plan']);
}
}
$new_user->client_id = $invitation->client_id;
$new_user->agency_id = $invitation->agency_id;
$new_user->auth_level = $invitation->auth_level;
$invitation->active = 0;
$invitation->save();
$redirect_path = "verification/send/";
}else{
$new_user->auth_level = config('LM2.ADMIN_AUTH_LEVEL');
$redirect_path = "welcome/send/";
}
$new_user->name = $user->name;
$new_user->email = $user->email;
$new_user->provider_id = $user->id;
$new_user->provider_token = $user->token;
$new_user->img_src = $user->avatar ? $user->avatar : $this->getDefaultAvatarSrc();
$new_user->account_verified = 1;
$new_user->save();
Auth::loginUsingId($new_user->id);
return redirect($redirect_path.$new_user->id);
}else{
abort('403' , 'Unauthorized.');
}
}
А это промежуточное ПО Authenticate
:
class Authenticate
{
protected $auth;
public function __construct(Guard $auth)
{
$this->auth = $auth;
}
public function handle($request, Closure $next)
{
if (!$this->auth->user()) {
if ($request->ajax()) {
return response('Unauthorized.', 401);
} else {
return redirect()->guest('login') ;
}
}elseif(!$this->auth->user()->active){
$this->auth->logout();
if ($request->ajax()) {
return response('Unauthorized.', 401);
} else {
return redirect()->guest('login')->withErrors(['Inactive User']);
}
}
return $next($request);
}
}
Кто-нибудь знает причину, по которой это происходит, и какое может быть решение для этого? большое спасибо!