Как войти в систему, а затем перенаправить с помощью Laravel 5.5? - PullRequest
0 голосов
/ 05 июля 2018

Я использую Laravel 5.5 и PHP 7.1 Я использую стандартную встроенную аутентификацию и промежуточное ПО, я ничего не настраивал.

Я хочу создать маршрут в файле маршрутов api.php, который будет выглядеть примерно так:

Route::group(array('prefix' => 'mobile'), function () {
      Route::get('requestaccess', ['uses' => 'MobileController@RequestAccess']);
});

Тогда в моем MobileController у меня был бы этот код:

public function RequestAccess() {
    try {
        $input = request()->all();
        $token = $input['token'];
        //$page = $input['page'];

        $user = User::where('mobile_access_token', $token)->first();
        if (!$user)
            return view('public.error', ['errorCode' => 901]);

        if ($user->mobile_access_expires < Carbon::now())
            return view('public.error', ['errorCode' => 902]);

         // I tried with and without the second param (true)
        if (!Auth::loginUsingId($user->id, true))
            return view('public.error', ['errorCode' => 903]);

        // My code makes it to here just fine which means the token
        // was valid and I 
        // successfully logged in.
        // Now I want to send them to a page where the user
        // can browse and remain logged in. 

        // I tried the following line but it does not work
        // It just immediately redirects me to the login page
        return redirect(url('dashboard'));

        // The following line works but if user clicks a link
        // to go to any other page it redirects them to the login page 
        return view('console.dashboard.dashboard');

    } catch (\Exception $e) {
        return view('public.error', ['errorCode' => 900, 'errorMessage' => $e->getMessage()]);
    }
}

и в файле маршрута web.php у меня есть следующее:

Route::group(['middleware' => 'auth'], function() {
    Route::get('dashboard', ['uses' => 'DashboardController@getDashboard']);
});

и, конечно, для тестирования я набираю что-то вроде этого в своем браузере:

example.com/api/mobile/requestaccess?token=abc

Все в одном домене. Я просто хочу войти в систему, чтобы пользователи оставались в системе во время просмотра сайта.

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Вы можете войти в систему, используя Auth::login(), как это

public function RequestAccess() {
    try {
        $input = request()->all();
        $token = $input['token'];
        $user = User::where('mobile_access_token', $token)->first();

        if (!$user){
             return view('public.error', ['errorCode' => 901, 'errorMessage' => 'Could not find user']);
        }

        Auth::login($user);

        redirect()->('dashboard');
    }catch(\Exception $e){
        return view('public.error', ['errorCode' => 900, 'errorMessage' => $e->getMessage()]);
    }
}

Примечание: Вы написали, что ваш маршрут в api, а в контроллере вы отображаете представление, убедитесь, что этот код будет работать для web guard, который имеет StartSession middleware. Если вы ищете аутентификацию API, то вы можете посмотреть это

check Другие методы аутентификации раздел в https://laravel.com/docs/5.6/authentication#authenticating-users

0 голосов
/ 05 июля 2018

Маршрут API не имеет \Illuminate\Session\Middleware\StartSession::class этого промежуточного программного обеспечения, то есть он не имеет никакого доступа к session, поэтому вы не можете поддерживать состояние сеанса, т. Е. Зарегистрированное состояние. Цель маршрута api - передача без сохранения состояния.

...