Php Laravel 5.4和社交名流在Twitter登录后重定向到呼叫页面

Php Laravel 5.4和社交名流在Twitter登录后重定向到呼叫页面,php,laravel,redirect,twitter,laravel-socialite,Php,Laravel,Redirect,Twitter,Laravel Socialite,我正在创建一个网站,该网站在Laravel5.4中通过社交名媛登录Twitter。现在,一旦用户登录,我重定向到主页;但是,我希望能够将用户重定向到激活“使用Twitter登录”链接的任何页面。我尝试使用return redirect()->back(),但由于最后一个请求是对Twitter的api的,这只会导致无限循环。我相信这一定是很基本的,但我似乎不明白。这是处理我的身份验证请求的控制器: <?php namespace App\Http\Controllers\Auth; us

我正在创建一个网站,该网站在Laravel5.4中通过社交名媛登录Twitter。现在,一旦用户登录,我重定向到主页;但是,我希望能够将用户重定向到激活“使用Twitter登录”链接的任何页面。我尝试使用
return redirect()->back()
,但由于最后一个请求是对Twitter的api的,这只会导致无限循环。我相信这一定是很基本的,但我似乎不明白。这是处理我的身份验证请求的控制器:

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\User;
use Illuminate\Support\Facades\Auth;
use Laravel\Socialite\Facades\Socialite;

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
,并且该页面受到
验证中间件的保护,则该用户将被重定向到登录页面,
/privatepage
将作为
url.designed
保存到会话中。然后,在成功身份验证后,Laravel检查会话是否具有
url.designed
密钥,如果有,它将重定向到会话中保存的url。否则,它将重定向到您定义的任何页面,默认值为
/home

如果要手动处理用户通过身份验证时发生的情况,则可以创建名为
authenticated()
的函数,该函数将通过手动重定向进行调用

如果您有
guest
访客和
登录的
用户的公共页面,您可以将
URL
存储到
Session
中,如下所示:

Session::flash('url',Request::server('HTTP_REFERER')); 
并在操作或身份验证后将其用作:

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

希望这能解决您的问题。

您需要的是默认的
Laravel
身份验证行为

return $this->authenticated($request, $this->guard()->user())
    ?: redirect()->intended($this->redirectPath());
如果用户访问
/privatepage
,并且该页面受到
验证中间件的保护,则该用户将被重定向到登录页面,
/privatepage
将作为
url.designed
保存到会话中。然后,在成功身份验证后,Laravel检查会话是否具有
url.designed
密钥,如果有,它将重定向到会话中保存的url。否则,它将重定向到您定义的任何页面,默认值为
/home

如果要手动处理用户通过身份验证时发生的情况,则可以创建名为
authenticated()
的函数,该函数将通过手动重定向进行调用

如果您有
guest
访客和
登录的
用户的公共页面,您可以将
URL
存储到
Session
中,如下所示:

Session::flash('url',Request::server('HTTP_REFERER')); 
并在操作或身份验证后将其用作:

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

希望这能解决您的问题。

返回重定向()->预期('/home#')

return redirect()->预期('/home#')

你可以使用
预定的
功能你可以使用
预定的
功能我最后做了一些类似于
会话::flash('url',Request::server('HTTP_REFERER')解决方案。我将当前路径作为参数附加到href的末尾,就像我的链接中那样:
href=“{{url('/auth/facebook')}?last url={!!htmlentities(request()->path())!!}”
然后我将其添加到我的
redirectToProvider()
函数中:
request()->session()->put('last\url',request()->query('last-url')我更喜欢你的答案,因为它涉及的代码更少,而且添加参数是多余的,因为数据已经通过
$\uu服务器
变量发送到请求中了。我最后做了一些类似于
会话::flash('url',request::SERVER('HTTP_REFERER'))的事情解决方案。我将当前路径作为参数附加到href的末尾,就像我的链接中那样:
href=“{{url('/auth/facebook')}?last url={!!htmlentities(request()->path())!!}”
然后我将其添加到我的
redirectToProvider()
函数中:
request()->session()->put('last\url',request()->query('last-url')我更喜欢您的答案,因为它涉及的代码更少,添加参数是多余的,因为数据已经通过
$\u服务器
变量在请求中发送