在Twitter登录后,Laravel 5.4和Socialite重定向到呼叫页面

我正在组建一个网站,该网站通过Laravel 5.4中的Socialite进行Twitter登录。 现在,一旦用户登录,我将重定向到主页; 不过,我希望能够将用户重定向到他激活“使用Twitter登录”链接的任何页面。 我尝试使用return redirect()->back() ,但由于最后一次请求是Twitter的api,这只会导致无限循环。 我相信这一定是非常基本的,但我似乎无法弄清楚。 这是处理我的认证请求的控制器:

<?php

namespace AppHttpControllersAuth;

use AppHttpControllersController;
use AppUser;
use IlluminateSupportFacadesAuth;
use LaravelSocialiteFacadesSocialite;

class AuthController extends Controller
{
    /**
     * Where to redirect users after login.
     *
     * @var string
     */
    protected $redirectPath = '/home';

    /**
     * Redirect user to OAuth Provider.
     *
     * @param $provider
     * @return Response
     */
    public function redirectToProvider($provider)
    {
        return Socialite::driver($provider)->redirect();
    }

    /**
     * Obtain the user information from provider. check if user already
     * exists in our db by looking up their provider_id in the db.
     * If user exists, log them in. Otherwise, create a new user then log them in.
     * After login, redirect them to the authenticated users homepage.
     *
     * @param $provider
     * @return Response
     */
    public function handleProviderCallback($provider)
    {
        try {
            $user = Socialite::driver($provider)->user();
        } catch (Exception $e) {
            return redirect("auth/$provider");
        }
        $authUser = $this->findOrCreateUser($user, $provider);
        Auth::login($authUser, true);

        return redirect($this->redirectPath);
    }

    /**
     * If a user has registered before using social auth, return the user
     * else, create a new user object.
     *
     * @param $user Socialite user object
     * @param $provider Social auth provider
     * @return User
     */
    public function findOrCreateUser($user, $provider)
    {
        $authUser = User::where('provider_id', $user->id)->first();
        if ($authUser) {
            return $authUser;
        }

        return User::create([
            'name'        => $user->name,
            'handle'      => $user->nickname,
            'provider'    => $provider,
            'provider_id' => $user->id,
            'avatar'      => $user->avatar_original,
        ]);
    }

}

你想要的是默认的Laravel认证行为。

return $this->authenticated($request, $this->guard()->user())
    ?: redirect()->intended($this->redirectPath());

如果用户访问/privatepage页面,并且该页面受到auth middleware保护,则用户被重定向到登录页面,并且/privatepage url.intended页面以url.intended被保存到会话中。 然后,在验证成功后, Laravel检查会话是否具有url.intended键,如果确实如此,它将重定向到会话中保存的URL。 如果没有,它将重定向到你定义的任何页面,默认是/home

如果您想手动处理用户通过身份验证时发生的情况,则可以创建一个名为authenticated()的函数,该函数将被调用,而不是手动重定向。

要么

如果你有一个共同的网页guest游客和logged in用户,你可以存储URLSession是这样的:

Session::flash('url',Request::server('HTTP_REFERER')); 

并在操作或身份验证后使用它作为:

return redirect(Session::get('url')); 

希望这能解决你的问题。

链接地址: http://www.djcxy.com/p/33123.html

上一篇: Laravel 5.4 and Socialite redirect to calling page after Twitter login

下一篇: Laravel Socialite broken after hosting type is changed