簡體   English   中英

Twitter登錄后,Laravel 5.4和Socialite重定向到調用頁面

[英]Laravel 5.4 and Socialite redirect to calling page after Twitter login

我正在整理一個網站,該網站在Laravel 5.4中通過Socialite具有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並且該頁面受auth middleware保護,則該用戶將被重定向到登錄頁面,並且/privatepage被保存為url.intended到會話中。 然后,在成功通過身份驗證后, Laravel檢查會話是否具有url.intended密鑰,如果存在,則將重定向到會話中保存的URL。 如果沒有,它將重定向到您定義的任何頁面,默認值為/home

如果您想手動處理通過用戶身份驗證時發生的情況,則可以創建一個稱為authenticated()的函數,該函數將通過手動重定向來調用。

要么

如果您有guest訪問者的通用頁面和已logged in用戶,則可以將URL存儲到Session ,如下所示:

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

並在操作或驗證后將其用作:

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

希望這能解決您的問題。

返回redirect()-> intended('/ home#');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM