Laravel Route 中间件身份验证 [重复]

Posted

技术标签:

【中文标题】Laravel Route 中间件身份验证 [重复]【英文标题】:Laravel Route middleware Auth [duplicate] 【发布时间】:2019-06-12 11:36:27 【问题描述】:

我做了一条这样的路线:

Route::get('free-download/product' , 'ProductController@freeDownload')->name('product.free')->middleware('auth');

此路由在调用 freeDownload 方法之前检查用户是否已登录。如果没有,就会出现登录表单。

然后用户需要登录,登录控制器返回主页,用户需要再次单击按钮路由('product.free')才能访问路由名称“product.free”。

有一种方法可以调用 ProductController@freeDownload 方法 如果用户在之前点击了按钮,则在登录后?

希望我或多或少清楚。

这里是我的登录控制器:

    class LoginController extends Controller

    use AuthenticatesUsers;

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

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

我的 freeDownload 方法终于来了

public function freeDownload(Product $product)

    $user_download = UserDownload::where('user_id' , auth()->user()->id)->where('product_id' , $product->id)->exists();

    if(!$user_download && $product->file)

        $user_download = new UserDownload();
        $user_download->user_id = auth()->user()->id;
        $user_download->product_id = $product->id;
        $user_download->save();

        $product->downloads = $product->downloads + 1;
        $product->save();

        return Storage::disk('s3')->download($product->file);

    else

        Alert::error('Download error', 'file not found');
        return back();
    

【问题讨论】:

【参考方案1】:

在登录控制器中使用intended 方法。

public function login(Request $request)

    if ($this->guard()->attempt(...)) 
        return redirect()->intended(route('home'));
     else ...

它会在被中间件捕获之前尝试重定向到预期的页面。如果找不到目标页面,它会重定向到home 页面。

【讨论】:

感谢您的回复,只有当我在登录前请求路由时,此方法才会将我重定向到路由“product.free”?我应该尝试什么? 是的,attempt 是您放置凭据以登录用户的位置。检查您当前的 AuthController 它不工作它把我带回家但不是路由('product.free')。顺便说一句,按钮在我的主页视图中。我没有提到这个。

以上是关于Laravel Route 中间件身份验证 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 身份验证中间件“auth:api”

Laravel 多重身份验证保护路由多个中间件不起作用

在Laravel中使用Middleware进行身份验证

如何使用 API 中间件在 Laravel 中测试 PHPUnit 一个经过身份验证的用户?

Laravel 在身份验证异常时自动重定向

身份验证控制器中的 Laravel 5.2 Web 中间件导致 csrf 令牌不匹配