【问题标题】:laravel auth middleware not redirectly on intended pagelaravel auth 中间件未在预期页面上重定向
【发布时间】:2016-12-02 10:38:39
【问题描述】:

我正在使用 hesto/multi-auth 包

默认情况下,如果我已将身份验证中间件分配给路由,因此登录后它应该将我重定向回预期页面,但它只是第一次执行..

一切正常,我只想要第一次,但是一旦我注销并尝试再次访问路由,它确实会转到登录页面,而不是重定向到用户/主页,但第一次运行完美,请参阅 40 秒视频 http://neelnetworks.org/video/laravel.mp4 有什么解决办法吗?

这些是我的网络路线

Route::get('/', 'PagesController@getIndex')->middleware('user');

Route::group(['prefix' => 'user'], function () {
  Route::get('/login', 'UserAuth\LoginController@showLoginForm');
  Route::post('/login', 'UserAuth\LoginController@login');
  Route::post('/logout', 'UserAuth\LoginController@logout');

  Route::get('/register', 'UserAuth\RegisterController@showRegistrationForm');
  Route::post('/register', 'UserAuth\RegisterController@register');

  Route::post('/password/email', 'UserAuth\ForgotPasswordController@sendResetLinkEmail');
  Route::post('/password/reset', 'UserAuth\ResetPasswordController@reset');
  Route::get('/password/reset', 'UserAuth\ForgotPasswordController@showLinkRequestForm');
  Route::get('/password/reset/{token}', 'UserAuth\ResetPasswordController@showResetForm');

});

这是我的页面控制器

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class PagesController extends Controller
{

   public function getIndex()
   {

    return "hello";
   }
}

第一次完美运行,为什么我们登录一次后就不行了?

如果我清除所有缓存和 cookie,它会再次起作用,这是默认行为还是 laravel 中的错误?你能澄清一下还是包裹有问题

该问题已在 github https://github.com/Hesto/multi-auth/issues/46 中提出

【问题讨论】:

  • 尝试调试您的会话。很可能 laravel 将特定路线存储在“预期”中。这不会在初始登录/设置时存储。但是在您登录一次后,它可能在您的会话中。如果你把所有的东西都倒掉,你应该能够看到它。尝试查找我们的“intent”是否有值,如果有,请尝试查找它的设置位置。
  • 我没有在会话中找到任何变量集,我发现只有在 cookie XSRF-TOKEN 和 laravel_session 中没有别的,会话保持为空

标签: laravel laravel-5.3


【解决方案1】:

在你的 UserAuth/LoginController.php 中创建这样的 showLoginForm 方法

public function showLoginForm()
{
    session()->put('url.intended',url()->previous());
    return view('user.auth.login');
}

因为它在将表单发布到 /user/login 时更改了以前的 url,如果您登录,您将被重定向到 /user/home

【讨论】:

  • 谢谢亲爱的.. 它运行良好,但我还必须删除 $redirectTo 变量才能使其正常工作.. 非常感谢
  • 很高兴它有帮助!
【解决方案2】:

经过这么多的挖掘,我找到了正确的解决方案

在 RedirectIfNot{guard-name} 例如 RedirectIfNotAdmin

我们需要添加这一行

session()->put('url.intended', url()->current());

所以中间件看起来像这样

<?php

namespace App\Http\Middleware;

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

class RedirectIfNotAdmin
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next, $guard = 'admin')
    {

        if (!Auth::guard($guard)->check()) {
            session()->put('url.intended', url()->current());
            return redirect('/admin/login');
        }

        return $next($request);
    }
}

【讨论】:

    【解决方案3】:

    laravel 登录后的默认重定向是转到 LoginController 中设置的 /home:

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

    并且有默认的中间件 RedirectIfAuthenticated

    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);
        }
    }
    

    在 app/Http/Controllers/Auth/RegisterController.php 中

    class RegisterController extends Controller
    {
        /*
        |--------------------------------------------------------------------------
        | Register Controller
        |--------------------------------------------------------------------------
        |
        | This controller handles the registration of new users as well as their
        | validation and creation. By default this controller uses a trait to
        | provide this functionality without requiring any additional code.
        |
        */
    
        use RegistersUsers;
    
        /**
         * Where to redirect users after login / registration.
         *
         * @var string
         */
        protected $redirectTo = '/home';
    

    这就是你需要做出改变才能按照自己的方式工作的地方......

    【讨论】:

    • 我认为您理解我的问题.. 转到此链接 github.com/Hesto/multi-auth/issues/46 并尝试理解我想说的内容
    • 据我所知,您没有使用普通的 Laravel,这是一些外部“插件”?
    • 是的,它是一个 laravel 包
    猜你喜欢
    • 2020-07-04
    • 1970-01-01
    • 2023-03-27
    • 2016-06-04
    • 2015-01-26
    • 2021-03-20
    • 2020-07-20
    • 2013-03-06
    • 2021-06-21
    相关资源
    最近更新 更多