Laravel redirect () - >intended() не работает в пользовательском контроллере входа

Laravel redirect () - >intended() не работает в пользовательском контроллере входа

16.08.2018 09:03:01 Просмотров 66 Источник

У меня есть пользовательский контроллер входа в систему и его использование return redirect()->intended(route('home')), согласно документации, это должно отправить пользователю перенаправление пользователя на URL-адрес, к которому они пытались получить доступ, прежде чем быть перехваченным промежуточным программным обеспечением аутентификации.

Но для моего случая каждый раз это перенаправление на home route.Я уверен, что поступил правильно или, по крайней мере, думаю, что поступил правильно. Может кто-нибудь, пожалуйста, скажите мне, где я делаю это неправильно ??

Мой logincontrollerвыглядит так:

public function __construct()
    {
        $this->middleware('guest');
    }

 public function login(Request $request)
    {
        $validatedData = $request->validate([
            'email' => 'required|email|max:255',
            'password' => 'required|max:255',
        ]);
        try {
            $response = HelperFunctions::fetchData('post', 'login/login', [
                'loginId' => $request->get('email'),
                'password' => md5($request->get('password'))
            ]);
            if ($response['code'] == 200 && $response['success']) {
                session([
                    'api_token' => $response['sessionId'],
                    'user_data' => $response['data']['profile']
                ]);

                return redirect()->intended(route('home'));
            } else {
                return redirect()->back()->with('error', 'Please provide valid credentials');
            }
        } catch (\Exception $e) {
            return redirect()->back()->with('error', 'Opps!! Something is wrong. We are trying to fix it');
        }

Моя проверка подлинности промежуточного программного обеспечения

class checkAuthentication
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        //check if user is logged in
        if(Session::has('api_token') && Session::has('user_data')) {
            return $next($request);
        }

        return redirect(route('login'));

    }
}

Я также попытался dd()Session::get('url.intended'), но он возвращает пустой .

Я попытался найти ссылку на google, laracast & stackoverflow я нашел некоторые ссылки, но они не помогли мне. Может кто-нибудь, пожалуйста, помогите мне спасибо.

Некоторые ссылки я проверил и попробовал:

  1. https://laracasts.com/discuss/channels/laravel/redirect-intended-not-working-after-login?page=1
  2. Laravel 5-redirect () - >intended () после аутентификации не собирается intended
  3. https://laravel.io/forum/11-24-2014-problems-with-redirectintended-and-auth
У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/51882925/laravel-redirect-intended-is-not-working-in-custom-login-controller#comment90717835_51882925
Вы используете промежуточное программное обеспечение auth по умолчанию, которое поставляется с Laravel, или вы создали свой собственный?
https://stackoverflow.com/questions/51882925/laravel-redirect-intended-is-not-working-in-custom-login-controller#comment90717871_51882925
Я создал свое собственное промежуточное ПО
https://stackoverflow.com/questions/51882925/laravel-redirect-intended-is-not-working-in-custom-login-controller#comment90717899_51882925
Поскольку это общий пользовательский логин, и он не использует базу данных laravel по умолчанию, поэтому я думаю, что это промежуточное ПО не будет работать. Вот почему
https://stackoverflow.com/questions/51882925/laravel-redirect-intended-is-not-working-in-custom-login-controller#comment90717950_51882925
Можете ли вы добавить код для промежуточного программного обеспечения, которое вы используете?
https://stackoverflow.com/questions/51882925/laravel-redirect-intended-is-not-working-in-custom-login-controller#comment90718042_51882925
да, я добавил Теперь в вопросе
https://stackoverflow.com/questions/51882925/laravel-redirect-intended-is-not-working-in-custom-login-controller#comment90718105_51882925
Спасибо. Кроме того, какую версию Laravel вы используете?

Ответы - Laravel redirect () - >intended() не работает в пользовательском контроллере входа / Laravel redirect()->intended() is not working in custom login controller

Elisha Senoo

16.08.2018 09:11:02

Сделать это:

возвращение перенаправление()->предназначены ("дом");

Вместо этого:

возвращение перенаправление()->назначению(маршрут ("дом"));

https://stackoverflow.com/questions/51882925/laravel-redirect-intended-is-not-working-in-custom-login-controller/51883039#comment90717705_51883039
Да, я пробовал, но он также отправляет homeвместо предполагаемого маршрута пользователя
Является ответом!
Rwd

16.08.2018 09:36:34

Самым простым способом было бы redirect()->guest()в вашем Auth

Использование return redirect()->guest(route('login')); на перенаправителе-это то, что добавляет guest()значение для сеанса.


Кроме того, вместо возврата из промежуточного программного обеспечения, если они не аутентифицированы, вы можете url.intended:

AuthenticationException

Это позволит вам воспользоваться фреймворк Laravel по public function handle($request, Closure $next) { //check if user is logged in if(Session::has('api_token') && Session::has('user_data')) { return $next($request); } throw new AuthenticationException('Unauthenticated.'); } , если вам нужно. Вам также нужно будет добавить ExceptionHandlerв начало вашего класса.

https://stackoverflow.com/questions/51882925/laravel-redirect-intended-is-not-working-in-custom-login-controller/51883413#comment90718570_51883413
О, вау спасибо, что это сработало :)) Спасибо большое
https://stackoverflow.com/questions/51882925/laravel-redirect-intended-is-not-working-in-custom-login-controller/51883413#comment90718599_51883413
@user7747472 я также добавил альтернативу, но если вам не нужно подключаться к ExceptionHandler, тогда я бы просто придерживался redirect()->guest()на данный момент.
https://stackoverflow.com/questions/51882925/laravel-redirect-intended-is-not-working-in-custom-login-controller/51883413#comment90729111_51883413
о, хорошо, каков наилучший случай для использования исключения . и должен ли я обрабатывать его где-то или он обрабатывает автоматически ??
https://stackoverflow.com/questions/51882925/laravel-redirect-intended-is-not-working-in-custom-login-controller/51883413#comment90732545_51883413
@user7747472 он будет обрабатываться автоматически с помощью Laravel, однако вы можете переопределить, как он обрабатывается в вашем app/Exceptions/Handler. Если у вас нет необходимости/причины использовать обработку исключений, я бы не беспокоился об этом. Я просто подумал, что упомяну об этом, если вы использовали его в своем обычном рабочем процессе или (по какой-то причине) он появился позже.
https://stackoverflow.com/questions/51882925/laravel-redirect-intended-is-not-working-in-custom-login-controller/51883413#comment104173842_51883413
Ваш первый ответ не говорит, какая часть метода дескриптора должна быть опущена или перезаписана
https://stackoverflow.com/questions/51882925/laravel-redirect-intended-is-not-working-in-custom-login-controller/51883413#comment104175908_51883413
@IWantAnswers Извините, вы правы. Перенаправление часть входа в мой ответ должен заменить перенаправить часть входа промежуточного операцию по авторизации. Я не поставил его в своем ответе, поскольку это единственная часть промежуточного программного обеспечения, которая имеет перенаправление. Я буду обновлять свой ответ соответственно.
I Want Answers

20.11.2019 07:34:25

Я также попытался DD () Session:: get ('url.предназначен'), но он возвращает пустой .

В моем случае этот ключ существовал в моем сеансе, но по какой-то странной причине что-то забавное происходит после redirect()->intended()возвращает ответ перенаправления. Возможно, ответ отбрасывается при передаче или перехватывается каким-либо другим вызывающим объектом в стеке.

То, что я сделал, чтобы обойти это, состояло в том, чтобы вручную получить предполагаемый url-адрес из сеанса и передать его перенаправлению (вместо того, чтобы полагаться на базовые протоколы intended()).

Путем добавления этого

redirect(Session::get('url.intended', $this->redirectPath()));

в нижней части LoginController@showLoginResponse, как только пользователь аутентифицируется, Laravel может запомнить предполагаемый url-адрес и перенаправить на него

Закрыть X