Skip to content

Latest commit

 

History

History
89 lines (78 loc) · 2.6 KB

7.4退出.md

File metadata and controls

89 lines (78 loc) · 2.6 KB

退出会话

退出会话的原理也非常简单,我们在前面检验是否登录都是通过 Session 来判断,现在只需要删除对应的 Session 就大功告成了.
首先修改前端,添加一个退出的按钮

resources\views\_layout\header.blade.php:

~
<a class="btn btn-outline-success my-2 my-sm-0"
    href="{{ url('user/auth/read', ['id' => session('user.id')]) }}">
  {{ session('user.name') }}
</a>
~

@if(session('user'))
<div class="dropdown">
  <button class="btn btn-secondary dropdown-toggle"
          type="button"
          id="dropdownMenuButton"
          data-toggle="dropdown"
          aria-haspopup="true"
          aria-expanded="false">
    {{ session('user.name') }}
  </button>
  <div class="dropdown-menu"
        aria-labelledby="dropdownMenuButton">
    <a class="dropdown-item"
        href="{{ url('user/auth/read', ['id' => session('user.id')]) }}">个人主页</a>
    <a class="dropdown-item">
      <form action="{{ url('user/session/delete', ['id' => session('user.id')]) }}"
            method="POST">
        <input type="hidden"
                name="__token__"
                value="{{ $token }}" />
        <button class="btn btn-block"
                type="submit"
                name="button">退出</button>
      </form>
    </a>
  </div>
</div>
@else
<a class="btn btn-outline-success my-2 my-sm-0"
    href="{{ url('user/auth/create') }}">注册</a>
<a class="btn btn-outline-success my-2 my-sm-0"
    href="{{ url('user/session/create') }}">登录</a>
@endif

此时再刷新页面,会提示 token 未定义,我们需要为 read 方法添加 token

application\user\controller\Auth.php:

public function read($id)
{
    if (Session::has('user')) {
        $user = User::find($id);
        $token = $this->request->token('__token__', 'sha1');
        $this->assign([
            'user' => $user,
            'token' => $token
        ]);
        return $this->fetch();
    } else {
        return redirect('user/session/create')->with('validate','请先登录');
    }
}

现在再次刷新前端页面,可以正常输出了.
在前端的 退出 按钮里,我们创建了一个 DELETE 方法的表单,现在需要实现退出功能.

application\user\controller\Session.php:

public function delete($id)
{
    if (SessionFacade::has('user') && $id === SessionFacade::get('user.id')) {
        SessionFacade::delete('user');
        return redirect('user/session/create')->with('validate','您已退出');
    } else {
        return '非法请求';
    }
}

删除 Session 并重定向到登录页面,退出功能已经完成.