Необходимо разрешить пользователям входить с несколькими учетными данными, такими же, как вход с другими функциями учетной записи в службах Gmail - Laravel - PullRequest
0 голосов
/ 20 сентября 2019

Я хочу, чтобы мои пользователи могли входить с разными credentials в одном и том же окне браузера, в котором используется одна таблица users.Если бы таблицы были разными, то я обязательно сделаю это с guards, но проблема в том, что мне нужно управлять входами пользователей через одну таблицу.

Пожалуйста, помогите мне, как управлять несколькими сеансами в одном окне браузера,как при входе в систему с другой учетной записью в новой вкладке первая выходит из системы.

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 20 сентября 2019

Создайте новую защиту в авторизации администратора с той же моделью.

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

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

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

        'front' => [
            'driver'   => 'session',
            'provider' => 'clients',
        ],

В контроллере:

if ($this->guard()->attempt(['email' => $request->email, 'password' => $request->password, 'active' => 1])) {
            dd(' i am logged in');
        }
    }


protected function guard()
{
    return auth()->guard('front');
}
0 голосов
/ 20 сентября 2019

Я хотел сохранить multiple session для пользователя, чтобы он мог войти со своими другими идентификаторами электронной почты в одном и том же окне браузера на разных вкладках.Здесь мы рассмотрим, как мы можем управлять этим и как Gmail управляет им.

  • Сначала вам нужно управлять этим, user хочет войти в систему со своей другой учетной записью или переключить учетные записи.Таким образом, вы можете показать ему страницу входа в систему, добавив любую запись в url, которая показывает, что он хочет сменить учетную запись.

Если ваш исходный URL login равен http://www.examle.com/login, то для множественного входа выможет дать ему URL-адрес, например http://www.examle.com/u/1/login (вы можете увеличить число после u/ части столько раз, сколько хотите переключить учетные записи)

  • Затем перейдите к своему config/sessions.php и отредактируйте свой cookieвыполните следующие действия:
<?php

$user_type = ( ( !empty(request()) && (int)request()->segment(2) ) > 0 ? '_'. request()->segment(2) : '');

return [
    .....rest of array

    'cookie' => env(
        'SESSION_COOKIE',
        Str::slug(env('APP_NAME', 'laravel'), '_').'_session'. $user_type //This user_type generate various session keys for your multiple login according to generated URL
    ),
];

  • Затем необходимо изменить все URL-адреса на dynamic, чтобы он мог выполняться как для обычного маршрута (without '/u/number/url' part), так и для/u/number/url part.

  • Определите следующую переменную в верхней части вашего web.php

/**
 * Setting a variable to check if the user is logging in with first or multiple sessions
 */
$user_login = ( (int)request()->segment(2) > 0 ? 'u/'. request()->segment(2) : '' );

/**
 * User attempting to login with other accounts
 */
Route::post($user_login. '/login', 'Auth\LoginController@login');

/**
 * Get dashboard for filling the registeration forms
 * Your entire app URL will now go like this, whether you can use it with user number or without it. It will go smoothly
 */
Route::get($user_login. '/dashboard', ['as' => 'dashboard', 'uses' => 'FormController@getDashboard']);

/**
 * User attempting to login with other accounts
 */
Route::post($user_login. '/logout', 'Auth\LoginController@logout');
  • Это работаетздорово.Спасибо всем за помощь.
...