退出会话的原理也非常简单,我们在前面检验是否登录都是通过 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
并重定向到登录页面,退出功能已经完成.