Laravel 5.5 - 自动将用户注销重定向(在服务器上,但不在本地执行)

问题描述 投票:0回答:1

我正在尝试创建一个除了通过Socialite插件登录用户之外什么都不做的应用程序。一切正常,我被重定向到facebook,新用户被创建,然后当用户被重定向到'/'时,用户神秘地登出。

(注意,这不会在本地发生。在我的本地机器上一切正常)。

Facebook登录控制器:

public function handleFacebookCallback()
{
    $socialiteUser = Socialite::driver('facebook')->stateless()->user();

    $user = $this->findOrCreateUser('facebook', $socialiteUser);

    Auth::login($user, true);

    return redirect('/');
}

路线文件:

Route::get('/', 'Home@home')->name('home')->middleware('auth');
Route::get('/home', 'Home@home')->name('home')->middleware('auth');
Route::get('/login', 'Controller@welcome')->name('welcome');
Auth::routes();
Route::get('/logout', 'Auth\LoginController@logout');

Route::get('facebook', function() {
    return view('facebook');
});
Route::get('auth/facebook', 'Auth\FacebookController@redirectToFacebook');
Route::get('auth/facebook/callback', 'Auth\FacebookController@handleFacebookCallback');

登录控制器:

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;

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 = '/home';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }
}

中间件/ RedirectIfAuthenticated.php:

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth;

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('/home');
        }

        return $next($request);
    }
}

我的middlewares文件夹中没有定义的“auth”中间件。它通过laravel自动完成。

再次:此项目按预期工作,但不在服务器上。

最后注意:当我在重定向到'/'之前立即(Auth :: check()),甚至在服务器上,我得到“真实”,但是当我在登录页面上做同样的事情时,我得到了错误。所以不知何故用户正在注销重定向。

php facebook-login laravel-5.5 laravel-socialite laravel-authentication
1个回答
0
投票

这是你的问题Route::get('/', 'Home@home')->name('home')->middleware('auth');

您正在\ path中使用auth中间件。如果您不知道该中间件是做什么的,我建议您使用这个https://laravel.com/docs/5.6/authentication#protecting-routes

你的路线应该是

Route::get('/', 'Home@home')->name('home');

但你也应该修改它,因为它们使用相同的控制器

Route::get('/home', 'Home@home')->name('home')->middleware('auth');

另一个解决方案是检查开发者Facebook页面上的URL。

© www.soinside.com 2019 - 2024. All rights reserved.