微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Laravel Socialite 谷歌登录再次转移到登录页面

如何解决Laravel Socialite 谷歌登录再次转移到登录页面

我正在尝试将 Google 登录与我的应用程序集成。它工作正常,但它在谷歌身份验证后将您的用户发送回登录屏幕。但是当我再次点击谷歌登录时,它的行为就像用户已经登录一样。当我们从谷歌回来时,我不希望用户回退到登录。以下是我的控制器和路由文件

登录控制器

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class LoginController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Login Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles authenticating users for the application and
    | redirecting them to your home screen. The controller uses a trait
    | to conveniently provide its functionality to your applications.
    |
    */

    use AuthenticatesUsers;

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

    /**
     * Create a new controller instance.
     */
    public function __construct()
    {
        $this->middleware('guest',['except' => 'logout']);
    }

    /**
     * Log the user out of the application.
     *
     * @param \Illuminate\Http\Request $request
     *
     * @return \Illuminate\Http\Response
     */
    public function logout(Request $request)
    {
        $this->guard()->logout();

        /*
         * Remove the socialite session variable if exists
         */

        \Session::forget(config('access.socialite_session_name'));

        $request->session()->flush();

        $request->session()->regenerate();

        return redirect('/login');
    }

    /**
     * Get the Failed login response instance.
     *
     * @param \Illuminate\Http\Request $request
     *
     * @return \Illuminate\Http\RedirectResponse
     */
    protected function sendFailedLoginResponse(Request $request)
    {
        $errors = [$this->username() => __('auth.Failed')];

        if ($request->expectsJson()) {
            return response()->json($errors,422);
        }

        return redirect()->back()
            ->withInput($request->only($this->username(),'remember'))
            ->withErrors($errors);
    }

    /**
     * The user has been authenticated.
     *
     * @param \Illuminate\Http\Request $request
     * @param mixed                    $user
     *
     * @return mixed
     */
    protected function authenticated(Request $request,$user)
    {
        $errors = [];

        if (config('auth.users.confirm_email') && !$user->confirmed) {
            $errors = [$this->username() => __('auth.notconfirmed',['url' => route('confirm.send',[$user->email])])];
        }

        if (!$user->active) {
            $errors = [$this->username() => __('auth.active')];
        }

        if ($errors) {
            auth()->logout();  //logout

            return redirect()->back()
                ->withInput($request->only($this->username(),'remember'))
                ->withErrors($errors);
        }

        return redirect()->intended($this->redirectPath());
    }
}

SocialLoginController


namespace App\Http\Controllers\Auth;

use App\Models\Auth\User\User;
use App\Services\RoleService;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Support\Facades\Auth;
use Socialite;

class SocialLoginController extends LoginController
{
    use AuthenticatesUsers;

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

    public function redirect($provider)
    {
        return Socialite::driver($provider)->stateless()->redirect();
    }

    public function googleCallback($provider)
    {
        $userSocial =   Socialite::driver($provider)->stateless()->user();
        $user       =   User::where(['email' => $userSocial->getEmail()])->first();
        if($user){
            Auth::login($user,true);
            return redirect('admin/partners');

        } else {
            $user = User::create([
                'name'          => $userSocial->getEmail(),'email'         => $userSocial->getEmail(),]);

            $user->roles()->attach([RoleService::ROLE_AUTHENTICATED]);

            return redirect('/admin');
        }
    }
}

路由/auth.PHP


Route::group(['namespace' => 'Auth','middleware' => ['force.ssl']],function () {

    // Authentication Routes...
    Route::get('login','LoginController@showLoginForm')->name('login');
    Route::post('login','LoginController@login');
    Route::get('logout','LoginController@logout')->name('logout');


    // Social Authentication Routes...
    Route::post('login','SocialController@login');
    Route::get('login/{provider}','SocialLoginController@redirect');
    Route::get('login/{provider}/callback','SocialLoginController@googleCallback');
});

中间件/RedirectIfAuthenicated.PHP

class RedirectIfAuthenticated
{
    /**
     * Handle an incoming request.
     *
     * @param \Illuminate\Http\Request $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('/admin');
        }

        return $next($request);
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。