# 自定义
若系统提供的登录服务不满足您当前的登录需求,可通过一系列的配置定义适合自己业务的登录方式。
# 步骤一:新增登录控制器
新增自定义登录控制器,并实现接口\yunj\app\admin\controller\member\MemberLoginControllerInterface::class
- 可通过重写
login
、logout
、generateToken
、getRequestToken
方法来定义登录
、退出登录
、生成Token
、获取请求Token
业务逻辑
namespace app\controller\admin\member;
use yunj\app\admin\controller\member\MemberLoginControllerInterface;
class MemberLoginController implements MemberLoginControllerInterface {
/**
* 登录
* @return \think\response\View|\yunj\core\response\Json
*/
public function login() {
if (request()->isPost()) {
// 登录提交处理
// 获取登录参数,并校验有效性
$param = request()->all();
...
// 拿到当前登录用户信息
$member = (new AdminMember())->find('...');
// 调用登录服务获取授权token
$data = admin_member_login_service()->login($member);
$token = $data['token']; // 登录用户授权token
$expire = $data['expire']; // 授权token有效期,单位s
return success_json(['token' => $token,'expire' => $expire]);
}
// 登录页面
// 用户可自定义登录页面,然后调用相关的登录接口,实现自定义的登录业务
$vars = [...];
return $this->view('模板路径', $vars);
}
/**
* 退出/切换账户
* @return \think\response\Redirect
*/
public function logout() {
// 调用登录服务注销当前授权token
admin_member_login_service()->logout();
// 跳转到登录页
return redirect(build_url('yunjAdminMemberLogin'));
}
/**
* 生成token
* @param AdminMember $member
* @return string
*/
public function generateToken(AdminMember $member): string {
if (!$member) return '';
return md5($member->id . $member->username . $userAgent ....);
}
/**
* 获取当前token
* @return string
*/
public function getRequestToken(): string {
// 如token放在header里
$token = request()->header('token');
return $token ? (string)$token : '';
}
}
# 步骤二:配置登录控制器
在配置文件yunj\config\admin.php
修改登录控制器login_controller
配置值
# 步骤三:重置系统路由
为了使新配制的登录控制器生效,
需进入项目根目录执行命令:php think yunj:init-system-routes
重置系统路由;
或进入路由管理页面执行列表右上角系统路由同步功能。