身份验证重定向失败

Posted

技术标签:

【中文标题】身份验证重定向失败【英文标题】:Authentication redirects fail 【发布时间】:2016-06-28 04:35:04 【问题描述】:

当我使用错误的凭据登录时,我得到了正确的响应。 当我使用正确的凭据登录时,登录页面会重新加载 302 请求 但它永远不会重定向到统计页面。 当我调试它时,我发现代码转到了中间件文件夹中的这个 authinticate.php, 它重定向到访客登录状态

if (Auth::guard($guard)->guest()) 
            if ($request->ajax() || $request->wantsJson()) 
                return response('Unauthorized.', 401);
             else 
                return redirect()->guest('login');
            
        

查看代码:-

Route.php

Route::get('login', 'LoginController@index');
Route::post('signin', 'LoginController@signin');
Route::get('signout', 'LoginController@signout');


Route::group(['prefix' => 'api'], function() 
    Route::resource('authenticate', 'AuthenticateController', ['only' => ['index']]);
    Route::post('authenticate', 'AuthenticateController@authenticate');
);

Route::group(['middleware' => ['web']], function () 
    Route::auth();
    Route::get('/', 'StatisticsController@index');
    Route::get('/statistics', 'StatisticsController@statistics');

);

登录控制器

    public function index() 

        return view('login');
    

    public function signin(Request $request) 

        $errors = [];
        $email=$request['email'];
        $password= $request['password'];
        $credentials = array('email' => $email, 'password' => $password);

        if(Auth::attempt($credentials))
        
          return redirect('/statistics');


        
        return "bad request";

    
     public function signout()
    
        Auth::logout();
        return redirect('/login');    


统计控制器

class StatisticsController extends Controller 
    public function __construct()
    
                    $this->middleware('auth');

    
    public function index() 

    return view('statistics')->with($data);
  

public function statistics() 
        return view('statistics');

  




Kernal.php 请注意,有 JWT 身份验证库,我仅将其用于移动应用的静态身份验证。

protected $middleware = [
        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
    ];

    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
        ],

        'api' => [
            'throttle:60,1',
        ],
    ];

    protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'jwt.auth' => 'Tymon\JWTAuth\Middleware\GetUserFromToken',
        'jwt.refresh' => 'Tymon\JWTAuth\Middleware\RefreshToken'
    ];

中间件/authenticate.php

<?php

namespace App\Http\Middleware;

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

class Authenticate


    public function handle($request, Closure $next, $guard = null)
    
        if (Auth::guard($guard)->guest()) 
            if ($request->ajax() || $request->wantsJson()) 
                return response('Unauthorized.', 401);
             else 
                return redirect()->guest('login');
            
        

        return $next($request);
    

【问题讨论】:

其他都是 Laravel 5.2 的应用程序吗? app/Http/Middleware/Authenticate.php 是否完好无损? app/Http/Controllers/Auth 中的控制器呢?你也可以在你的问题中清理你的英语吗?至少添加一些标点符号 - 很难知道一个场景在哪里结束,下一个场景在哪里开始。 问题不清楚! 你能给我看看 \App\Http\Middleware\Authenticate 文件吗?? @tremby 一切相关的都是库存。我还在问题中添加了中间件/authinticate.php,关于 Auth 文件夹中的控制器,它是库存的 auth 控制器,我什至没有碰它,抱歉缺少标点符号,我已经编辑了问题谢谢你回复 @CanCelik 现在再次检查,抱歉:) 【参考方案1】:

快速分析: 您的身份验证方法或控制器没有问题。 问题在于您没有“/statistics”的路线 Laravel 至少从第 5 版开始,你必须明确你的路线“PS:他们不推荐使用 Route::Controller()” 顺便一提 Route::get('/', 'StatisticsController@index'); 指你的应用基础路由

解决方案 添加统计路由

Route::get('/statistics', 'StatisticsController@statistics');

例如。

【讨论】:

它在那里,但我忘了把它放在这里,因为项目中有很多路线无论如何它仍然无法正常工作,重定向到登录我已经尝试了几个小时无论如何谢谢你的回答跨度> 【参考方案2】:

您正在重定向到 StatisticsController@statistics,但您的 StatisticsController 中没有定义统计功能。

【讨论】:

controller中有这个名字的方法,问题出现在construct方法,重定向时Auth变成guest【参考方案3】:

检查你的缓存。我有一个类似的问题,我失去了几个小时,所以这些是我所做的一些步骤:

php 工匠路线:清除 清除浏览器缓存 运行作曲家更新 下载新的 laravel 副本(新项目),然后慢慢将代码块合并到新项目中

【讨论】:

以上是关于身份验证重定向失败的主要内容,如果未能解决你的问题,请参考以下文章

使用 Apollo 和 React 捕获身份验证失败后如何正确重定向

如何在使用 keycloak 进行身份验证时处理 uri 重定向

带有透明重定向的 PayPal PayFlow Pro - 用户身份验证失败问题/文档

Spring Security:如果身份验证失败,则重定向到登录页面

Nodejs和PassportJs:如果身份验证失败,则不会调用passport.authenticate后重定向中间件

Firebase 身份验证登录但成功登录后重定向到主页失败(服务器响应 200)