[TOC]
## 完整代码
>注:注释的部分,可根据实际情况进行去掉!
```
<?php
namespace app\agent\controller;
use think\Controller;
class PublicController extends Controller
{
/**
* 后台登陆界面
*/
public function login()
{
// $loginAllowed = session("__LOGIN_BY_CMF_ADMIN_PW__");
// if (empty($loginAllowed)) {
// $this->error('非法登录!', cmf_get_root() . '/');
// }
$agent_id = session('AGENT_ID');
if (!empty($agent_id)) {//已经登录
redirect(url("agent/Index/index"));
} else {
// $site_admin_url_password = config("cmf_SITE_ADMIN_URL_PASSWORD");
// $upw = session("__CMF_UPW__");
// if (!empty($site_admin_url_password) && $upw != $site_admin_url_password) {
// redirect(ROOT_PATH . "/");
// } else {
// session("__SP_ADMIN_LOGIN_PAGE_SHOWED_SUCCESS__", true);
// $result = hook_one('admin_login');
// if (!empty($result)) {
// return $result;
// }
return $this->fetch(":login");
// }
}
}
}
```
## `session`说明
| session名字 | 作用 |
| --- | --- |
| `__LOGIN_BY_CMF_ADMIN_PW__` | 设置后台登录加密码,如果设置后值为1 |
| `AGENT_ID` | 登录ID |
| `cmf_SITE_ADMIN_URL_PASSWORD` | 这个不清楚 |
| `__CMF_UPW__` | 这个不清楚 |
| `__SP_ADMIN_LOGIN_PAGE_SHOWED_SUCCESS__` | 这个不清楚 |
## 解析
### 简单登录
>本身登录应该是简简单单的
```
<?php
namespace app\agent\controller;
use think\Controller;
class PublicController extends Controller
{
/**
* 后台登陆界面
*/
public function login()
{
$agent_id = session('AGENT_ID');
if (!empty($agent_id)) {//已经登录
redirect(url("agent/Index/index"));
} else {
return $this->fetch();
}
}
}
```
### 验证登录
>但是为了更安全一些,后台设置了 `后台加密码`
```
<?php
namespace app\agent\controller;
use think\Controller;
class PublicController extends Controller
{
/**
* 后台登陆界面
*/
public function login()
{
$loginAllowed = session("__LOGIN_BY_CMF_ADMIN_PW__");
if (empty($loginAllowed)) {
$this->error('非法登录!', cmf_get_root() . '/');
}
$admin_id = session('AGENT_ID');
if (!empty($admin_id)) {//已经登录
redirect(url("agent/Index/index"));
} else {
return $this->fetch();
}
}
}
```
### 后台加密码前端相关
#### 后台加密码代码
```
<div class="form-group">
<label for="input-admin_url_password" class="col-sm-2 control-label">后台加密码</label>
<div class="col-md-6 col-sm-10">
<input type="text" class="form-control" id="input-admin_url_password" name="admin_settings[admin_password]" value="{$admin_settings.admin_password|default=''}" id="js-site-admin-url-password">
<p class="help-block">英文字母数字,不能为纯数字</p>
<if condition="!empty($admin_settings.admin_password)">
<p class="help-block" style="color: red;">设置加密码后必须通过以下地址访问后台,请劳记此地址,为了安全,您也可以定期更换此加密码!</p>
<php>
$site_admin_url_password =config("SP_SITE_ADMIN_URL_PASSWORD");
$root=cmf_get_root();
$root=empty($root)?'':'/'.$root;
$site_domain = cmf_get_domain().$root;
</php>
<p class="help-block">后台登录地址:<span id="js-site-admin-url">{:$site_domain}/{$admin_settings.admin_password}</span></p>
</if>
</div>
</div>
```
#### 后台加密码图片
![mark](http://qiniu.newthink.cc/blog/20171024-105807310.png)
非法登录
![mark](http://qiniu.newthink.cc/blog/20171024-121551192.png)
#### 后台加密码路由
点击保存后,会在 `data/route.php` 生成一个路由设置
```
<?php return array (
'test$' => 'admin/Index/index',
);
```
如图所示:
![mark](http://qiniu.newthink.cc/blog/20171024-110016098.png)
这时我们访问 `http://thinkcmf/admin` 或者 `http://thinkcmf/test` 就者可以访问了!
![mark](http://qiniu.newthink.cc/blog/20171024-111303217.png)
这个值是在这里进行设置的!!
后台登录地址也很明显可以访问
![mark](http://qiniu.newthink.cc/blog/20171024-114648136.png)
### 备注二
```
$site_admin_url_password = config("cmf_SITE_ADMIN_URL_PASSWORD");
$upw = session("__CMF_UPW__");
```
这个应该是没有用的!
### 备注三:hook
```
$result = hook_one('admin_login');
if (!empty($result)) {
return $result;
}
```
如果想要在登录时加载一个 `hook`钩子插件,可以在这里加载一个这样的代码
![mark](http://qiniu.newthink.cc/blog/20171024-112015279.png)