Laravel Auth实现登录后重定向至/createPost页面的方法
嘿,针对你的Laravel Auth场景——未认证用户访问/createPost时看到登录/注册表单,登录后直接回到发帖页面,我给你整理了几个靠谱的实现方式,按复杂度从低到高来:
方法1:直接修改LoginController的默认跳转(最简单)
Laravel自带的LoginController继承了AuthenticatesUsers trait,默认登录成功后会跳去/home,咱直接改这个逻辑就行:
打开app/Http/Controllers/Auth/LoginController.php,添加或者替换redirectTo属性:
protected $redirectTo = '/createPost';
要是你需要更灵活的判断(比如只有从/createPost过来的登录才跳回去,其他情况跳默认页),可以用方法替代属性:
protected function redirectTo() { // Laravel会自动把未认证用户访问的页面存在session的url.intended里 if (session()->has('url.intended')) { return session()->pull('url.intended'); } // 不是从/createPost过来的登录,就跳默认的/createPost(也可以改成你想要的其他地址) return '/createPost'; }
方法2:在登录表单里传重定向参数(精准控制)
因为你的登录表单是嵌在/createPost页面的,咱可以在表单里加个隐藏字段,明确告诉系统登录后要跳回哪里:
在/createPost页面的登录表单中添加:
<input type="hidden" name="redirect" value="/createPost">
然后去LoginController里添加authenticated方法(没有的话就新增),处理这个参数:
protected function authenticated(Request $request, $user) { // 有redirect参数就跳指定地址,没有就用默认的/createPost return redirect($request->input('redirect', '/createPost')); }
方法3:利用Laravel的intended自动记录来源
如果你的/createPost页面原本是用auth中间件保护的,但你改成了显示登录表单而不是跳转到/login,那可以手动把当前URL存入session,让Laravel自动记住这个跳转目标:
在/createPost对应的控制器方法里,加上这段逻辑:
public function showCreatePostForm() { if (!auth()->check()) { // 把当前页面地址存进session,登录后会自动跳回来 session()->put('url.intended', url()->current()); } return view('createPost'); }
然后在LoginController里用intended方法跳转:
protected function authenticated(Request $request, $user) { // intended会优先跳session里存的url.intended,没有的话就用后面的默认地址 return redirect()->intended('/createPost'); }
额外小提示:注册后也跳/createPost
要是你希望用户注册完也直接跳去发帖页面,同样的逻辑套用在RegisterController就行,比如打开app/Http/Controllers/Auth/RegisterController.php,加个属性:
protected $redirectTo = '/createPost';
这样不管是登录还是注册,完成后都能直接回到/createPost,完美匹配你的需求~
内容的提问来源于stack exchange,提问作者user9297268

