Redirigir a la URL después de iniciar sesión con Socialite en Laravel

Necesito registrarme en un torneo con la URL:

http://laravel.dev/tournaments/1/register/ 

Esta URL está en el middleware ‘auth’, por lo que si el usuario no está conectado, se le redirige a la página de inicio de sesión.

Lo que necesito es redirigir a

 http://laravel.dev/tournaments/1/register/ 

Después del inicio de sesión social (tengo 2 proveedores, fb y google)

En este caso, no quiero que el usuario sea redirigido a la URL redirigida definida en .env

Esta es la función que uso para iniciar sesión con Socialite:

 public function execute($request, $listener, $provider) { if (!$request) { return $this->getAuthorizationFirst($provider); } $user = $this->users->findByUserNameOrCreate($this->getSocialUser($provider), $provider); if (!is_null($user)){ $this->auth->login($user, true); }else{ Session::flash('error', Lang::get('auth.account_already_exists')); return redirect('auth/login'); } return $listener->userHasLoggedIn($user); } 

¿Cómo puedo hacer para que el sistema me redirija a la acción inicial y no al parámetro redirect_url predeterminado?

Lo he resuelto con un inicio de sesión normal con la función guest (), pero no sé cómo implementarlo en este caso.

El problema es bastante similar a esta publicación

Las funciones clave son guest() y intended() :

  • guest() crea una respuesta de redireccionamiento a una URL de su elección, idealmente su página de inicio de sesión, mientras almacena la url actual donde puede redirigir a su usuario, cuando esta última completa con éxito el proceso de autenticación.

  • intended() obtiene la URL de redireccionamiento prevista después de que el usuario completa la autenticación.

Manifestación

Authenticate Middleware: se usa para verificar si el usuario que está accediendo a la url ha iniciado sesión.

 class Authenticate { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { //check if user is not logged in. if (Sentinel::check() === false) { //If ajax, send back ajax response if ($request->ajax()) { return response('Unauthorized.', 401); } else { //redirect guest to login page return redirect()->guest('/login'); } } return $next($request); } } 

RESTful UserController , donde manejamos todos los bashs de inicio de sesión

 /** * POST: Login * * @param Request $request * @return $this|\Illuminate\Http\RedirectResponse|\Illuminate\Http\Response */ public function postLogin(Request $request) { //Authenticate User if possible if ($this->service->user->loginByEmail($request->only(['email','password','remember_me']))) { //Authentication Successful - Redirect to url that guest was trying to access, else redirect to home page. return redirect()->intended('/'); } else { //Authentication error, redirect back to login page with input return redirect('/login')->withErrors(['password_incorrect' => 'Your password is incorrect. Please try again.'])->withInput(); } } 

Declaraciones de funciones que ya están en el marco

Illuminate\Routing\Redirector

 /** * Create a new redirect response, while putting the current URL in the session. * * @param string $path * @param int $status * @param array $headers * @param bool $secure * @return \Illuminate\Http\RedirectResponse */ public function guest($path, $status = 302, $headers = [], $secure = null) { //Store current full URL in session $this->session->put('url.intended', $this->generator->full()); //Redirect return $this->to($path, $status, $headers, $secure); } /** * Create a new redirect response to the previously intended location. * * @param string $default * @param int $status * @param array $headers * @param bool $secure * @return \Illuminate\Http\RedirectResponse */ public function intended($default = '/', $status = 302, $headers = [], $secure = null) { //Get path that guest was trying to access $path = $this->session->pull('url.intended', $default); //Redirect return $this->to($path, $status, $headers, $secure); } 

Úselo así: return redirect()->guest('auth/login'); .