Laravel 用户退出登录问题修复笔记

感谢依伟小哥哥的指点!

问题描述

一般情况下,我点击退出登陆都行,但是就是在个人中心那个页面退出给我报错,说一个跟问题不相关的 controller 的一个方法不存在

代码详情

我对网页前端进行了切割,header 单独一个 blade ,其中关于用户退出的按钮,代码如下:

<a href="#" class="dropdown-item" id="logout">
  <form action="{{'logout'}}" method="post">
    {{ csrf_field() }}
    {{ method_field('DELETE') }}
    <button type="submit" name="button" class="btn btn-block btn-outline-danger">logout</button>
  </form>
</a>

我使用 SessionController 来处理用户登出后会话的删除,使用 destroy 方法处理

public function destroy()
{
    Auth::logout();
    session()->flash('success', '您已成功退出!');
    return redirect('login');
}

我的 route list 如下

路由表

问题来了,其他页面都好说,但是就在其中一个用户详情的页面下退出这个人,就报错

问题触发的界面
报错界面

这不怪了吗?我的 logout 咋加到 http://weibo.test/users/ 后面了,按理说是放在 http://weibo.test 后面的啊,开始检查代码

我们发现前端的一行代码:

<form action="{{'logout'}}" method="post">
 
... ...

</form>

action="{{'logout'}} 这里我是写错了,应该是写成 action="{{route('logout')}}"

要是按照前者这样写的话,我们开始按这个路子分析。本来应该在 http://weibo.test/users/ 后面应该接上一个ID来查看人的信息,结合路由表,若按照错误写法分析,我们可以看到这次请求用上了 users/{{user}} ,而{{user}}的内容变成 logout 了,再加上我们的表单内是一个 DELETE 请求,自然的就转到如下的路由

图例

于是这个请求就成了对一个叫“logout”的人执行 destroy 方法,这个方法我当前还没写,并且这个 destroy 不是在 SessionController 找的,转而在 UserController 找的,这就很好理解这个报错页面的意思了

我们这里的用法应该是使用 route('xxxxx') 来让浏览器将 form 表单提交到正确的 function 中处理

NightingaleWK

曾经我是一名冒险家,直到我的膝盖中了一箭。

相关推荐

发表评论

电子邮件地址不会被公开。 必填项已用*标注

微信扫一扫

微信扫一扫

微信扫一扫,分享到朋友圈

Laravel 用户退出登录问题修复笔记
返回顶部

显示

忘记密码?

显示

显示

获取验证码

Close