登录与接口鉴权
由于 layuiAdmin 接管了视图层,所以不必避免可能会与服务端分开部署,这时你有必要了解一下 layuiAdmin 默认提供的:从 登录 到 接口鉴权,再到 注销 的整个流程。
登录拦截器
进入登入页面登入成功后,会在 localStorage 的本地表中写入一个字段。如: access_token (名称可以在 config.js 自定义)。拦截器判断没有 access_token 时,则会跳转到登入页。尽管可以通过伪造一个假的 access_token 绕过视图层的拦截,但在请求接口时,会自动带上 access_token,服务端应再次做一层校验。
流程
- 打开
config.js
,将interceptor
参数设置为true
(该参数为 1.0.0-beta6 开始新增)。那么,当其未检查到access_token
值时,会强制跳转到登录页面,以获取 access_token。 - 打开登录对应的视图文件
views/user/login.html
,在代码最下面,你将看到一段已经写好的代码,你需要的是将接口地址改为服务端的真实接口,并返回access_token
值。 - layuiAdmin 会将服务端返回的
access_token
值进行本地存储,这时你会发现 layuiAdmin 不再强制跳转到登录页面。并在后面每次请求服务端接口时,都会自动在参数和 Request Headers 中带上access_token
,以便服务端进行鉴权。 - 若鉴权成功,顺利返回数据;若鉴权失败,服务端的
code
应返回1001
(可在 config.js 自定义) , layuiAdmin 将会自动清空本地无效 token 并跳转到登入页。 - 退出登录:重新打开
controller/common.js
,搜索logout
,配上注销接口即可。
如果是在其它场景请求的接口,如:table.render(),那么你需要获取本地存储的 token 赋值给接口参数,如下:
//设置全局 table 实例的 token(这样一来,所有 table 实例均会有效)
table.set({
headers: { //通过 request 头传递
access_token: layui.data('layuiAdmin').access_token
}
,where: { //通过参数传递
access_token: layui.data('layuiAdmin').access_token
}
});
//设置单个 table 实例的 token
table.render({
elem: '#xxxx'
,url: 'url'
,where: {
access_token: layui.data('layuiAdmin').access_token
}
//,headers: {}
});
事实上,layuiAdmin 的所有 Ajax 请求都是采用 admin.req(options)
,它会自动传递 access_token
,因此推荐你在 JS 执行 Ajax 请求时直接使用它。其中参数 options 和 $.ajax(options)
的参数完全一样。
接口鉴权
我们推荐服务端遵循 JWT(JSON Web Token) 标准进行鉴权。对 JWT 不甚了解的同学,可以去搜索一些相关资料,会极大地增加应用的可扩展性。当然,你也可以直接采用传统的 cookie / session 机制。