Как перенаправить пользователя после входа на тот же маршрут, с которого пришел в laravel 7?

#laravel #authentication #redirect

#laravel #аутентификация #перенаправление

Вопрос:

У меня есть платежная карта. внизу есть ссылка, которая выводит гостевых пользователей на страницу входа. Я хочу, чтобы пользователи снова перенаправлялись на маршрут оплаты картой после входа в систему. не могли бы вы, пожалуйста, помочь мне, как я могу это сделать? кстати, я новичок в laravel. спасибо за ваше время, ребята: X вот loginController.php :

 <?php

    namespace AppHttpControllersAuth;

    use AppEventsLoginLogged;
    use AppRulesRecaptcha;
    use IlluminateHttpRequest;
    use AppHttpControllersController;
    use IlluminateFoundationAuthAuthenticatesUsers;
    use IlluminateSupportFacadesAuth;

    class LoginController extends Controller
   {
     
    use AuthenticatesUsers;

    /**
     * Where to redirect users after login.
     *
     * @var string
     */
    protected $redirectTo = '/admin/dashboard';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest')->except('logout');
        $this->middleware('throttle:3,1')->only('login');
    }

    /**
     * Attempt to log the user into the application.
     *
     * @param  IlluminateHttpRequest  $request
     * @return bool
     */
    protected function validateLogin(Request $request)
    {
        $request->validate([
            $this->username() => 'required|string',
            'password' => 'required|string',
            //'g-recaptcha-response' => ['required', new Recaptcha]
        ]);
    }

    /**
     * Get the needed authorization credentials from the request.
     *
     * @param  IlluminateHttpRequest  $request
     * @return array
     */
    protected function credentials(Request $request)
    {
        return array_merge(($request->only($this->username(), 'password')), ['usr_is_admin' => 1]);
    }
    public function authenticate(Request $request)
    {
        $credentials = $request->only('email', 'password');

        if (Auth::attempt($credentials)) {
            // Authentication passed...
            return redirect()->intended('dashboard');
        }
    }

    /**
     * Get the login username to be used by the controller.
     *
     * @return string
     */
    public function username()
    {
        return 'usr_name';
    }

    protected function authenticated(Request $request, $user)
    {
        event(new LoginLogged($request, $user));
    }

}
  

вот redirectIfAuthenticated.php промежуточное программное обеспечение:

 <?php

namespace AppHttpMiddleware;

use Closure;
use IlluminateSupportFacadesAuth;

class RedirectIfAuthenticated
{
    /**
     * Handle an incoming request.
     *
     * @param  IlluminateHttpRequest  $request
     * @param  Closure  $next
     * @param  string|null  $guard
     * @return mixed
     */
    public function handle($request, Closure $next, $guard = null)
    {
        if (Auth::guard($guard)->check()) {
            return redirect()->route('dashboard');
        }

        return $next($request);
    }
}
  

Ответ №1:

intended Метод в redirector перенаправит пользователя на URL, к которому он пытался получить доступ, прежде чем был перехвачен промежуточным программным обеспечением аутентификации. Для этого метода может быть предоставлен резервный URI на случай, если предполагаемое место назначения недоступно. Например :

 public function authenticate(Request $request)
    {
        $credentials = $request->only('email', 'password');

        if (Auth::attempt($credentials)) {
            // Authentication passed...
            return redirect()->intended('dashboard');
        }
    }
  

Комментарии:

1. спасибо за ваш ответ, но у меня это не работает, я уже пробовал это. Я не знаю, почему

2. Я использовал LoginController и перенаправлял аутентифицированное промежуточное программное обеспечение

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