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 中间件身份验证 [重复]的主要内容,如果未能解决你的问题,请参考以下文章