简介

之前的技术路线本来是angular的,后来经过一段时间的开发还是打算选择vue,原因是vue简单丰富,尽管angular规范强大,但是组件库都不太符合国人风格。看到GitHub上Vue Element Admin这么高的人气后就毫不犹豫的选择了这个后台管理框架。作为一个后端开发,刚刚下载Vue Element Admin框架时确实无从下手,但是一番研究之后也就适应了,今天就介绍下改造Vue Element Admin登录并对接vNext授权服务。vNext授权服务使用的是ids4框架,所以使用ids4框架授权的服务都可以参考该登录。

代码分析

根据Vue Element Admin作者的介绍,该框架登录需要两步,获取token和获取userinfo(用户信息)。Vue Element Admin作者公司的后端设计应该是用户信息中包括用户权限,所以Vue Element Admin(后称Admin)登录只需调两次接口。

在view路径的login中可以看到login的click事件:

    handleLogin() {
this.$refs.loginForm.validate(valid => {
if (valid) {
this.loading = true
this.$store.dispatch("user/userLogin",this.loginForm).then(()=>{
this.$router.push({path:'/'});
this.loading = false
}).catch(err=>{
this.$message.error(err)
this.loading = false
}) } else {
console.log('error submit!!')
return false
}
})
},

为了区别,我的登录方法名是userLogin,在loginForm中对client进行了包装:

      loginForm: {
username: 'admin',
password: '123qwe',
client_id: config.client.client_id,
client_secret: config.client.client_secret,
grant_type: config.client.grant_type
},

下一步开始获取token,在store目录中找到user.js并增加userLogin方法:

  userLogin({ commit }, data) {
return new Promise((resolve, reject) => {
axiosMethods.instancePosts('/connect/token', data)
.then(response => {
commit('SET_TOKEN', response.access_token)
setToken(response.access_token)
resolve()
}).catch((error) => {
reject(error)
})
})
},

Admin获取token代码:

  login({
commit
}, userInfo) {
const {
username,
password
} = userInfo
return new Promise((resolve, reject) => {
login({
username: username.trim(),
password: password
}).then(response => {
const {
data
} = response
commit('SET_TOKEN', data.token)
setToken(data.token)
resolve()
}).catch(error => {
reject(error)
})
})
},

可以看出两处获取token差别不大,Admin中login方法没有接口请求,而userLogin进行了post请求,post请求如下:

  instancePosts(url, params) {
var instance = axios.create({
baseURL: config.base.ip + ':' + config.base.authServerPort
})
instance.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'return new Promise((resolve, reject) => {
instance.post(url, data)
.then(response => {
resolve(response.data)
}, err => {
reject(err)
})
.catch((error) => {
reject(error)
})
})
},

注意:ids4中token接口参数必须是x-www-form-urlencoded,使用postman模拟如下:

上述方法可以顺利拿到token,并保存至cookie。

Admin在拿到token后还无法登录,因为Admin做了全局的权限验证,没有用户信息和权限信息是无法登录的,下一步开始获取用户信息。

ids4框架中获取userinfo非常容易,直接用token请求userinfo接口就可以拿到用户信息,还可以配置userinfo的信息,我配置的是sub、role、name

接下来开始获取userinfo:

Admin中已经提供了getInfo方法,只需做些修改就好了,修改后的代码如下:

  getInfo({
commit,
state
}) {
return new Promise((resolve, reject) => {
axiosMethods.getUserInfo('/connect/userinfo')
.then(response => {
commit('SET_NAME', response.name)
resolve(response)
}).catch(error => {
reject(error)
})
})
},

在axios封装中添加getUserInfo方法:

  getUserInfo(url) { // 获取用户信息
var instance = axios.create({
baseURL: config.base.ip + ':' + config.base.authServerPort
})
instance.defaults.headers.Authorization = 'Bearer ' + getToken()
return new Promise((resolve, reject) => {
instance.get(url)
.then(response => {
resolve(response.data)
}, err => {
reject(err)
})
.catch((error) => {
reject(error)
})
})
},

到这一步已经完成了Admin中原始的登录过程,由于vNext的设计中userinfo并没有包括权限信息,这里getInfo返回的数据只是name和role,如果role中有admin角色则Admin是可以登录的,不过这种登录有很大的缺陷。下一篇中我会单独介绍权限获取和Admin根据权限登录。

总结

如果是纯前端开发,只需理解Admin框架中roles代表的就是权限,而如果有过后端开发经验或者是全端工程师则需要区分。role在后台代表的是角色---权限的集合,而Admin框架中role代表的就是权限,我刚开始就是被搞混了,导致差点放弃Admin。这也是为什么上面的登录有权缺陷的原因,因为上面的登录权限是根据userinfo中的角色名判断的,这种判决是固定无法动态分配。

vNext参考篇:https://www.cnblogs.com/william-xu/p/11245738.html

文章目录:https://www.cnblogs.com/william-xu/p/12047529.html

[Abp vNext微服务实践] - vue-element-admin登录一的更多相关文章

  1. [Abp vNext微服务实践] - 前后端分类

    一.前景 abp vNext是ABP 开源 Web应用程序框架,是abp的新一代开源web框架.框架完美的集成.net core.identity server4等开源框架,适用于构建web应用程序和 ...

  2. [Abp vNext微服务实践] - 文章目录

    简介 ABP vNext是volosoft的新一代框架,ABP(vNext)完全使用.NET CORE和DDD(领域驱动)打造,目前GitHub已有6K+次提交,发布版本超过40次,Nuget包下载量 ...

  3. [Abp vNext微服务实践] - vue-element-admin管理Identity

    一.简介 abp vNext微服务框架中已经提供通用权限和用户角色管理模块,管理UI使用的是MVC模式,不适用于国内主打的MVVM开发模式.在前端框架选型后笔者决定改造abp vNext微服务框架中原 ...

  4. [Abp vNext微服务实践] - vue-element-admin登录二

    简介: Vue Element Admin是基于vue.element ui开发的后台管理ui,abp vNext是abp新一代微服务框架.本篇将会介绍如何改造Vue Element Admin权限验 ...

  5. [Abp vNext微服务实践] - 业务开发

    前几篇分别介绍了abp vNext微服务框架.开发环境搭建和vue element admin前端框架接入,在vue element admin中实现用户角色管理基本功能后就可以开始进行业务开发了,本 ...

  6. [Abp vNext微服务实践] - 框架分析

    一.简介 abp vNext新框架的热度一直都很高,于是最近上手将vNext的微服务Demo做了一番研究.我的体验是,vNext的微服务架构确实比较成熟,但是十分难以上手,对于没有微服务开发经验的.n ...

  7. [Abp vNext微服务实践] - 租户登录

    简介 Abp vNext微服务授权验证基于ids4,实现租户登录需要在授权服务中获取token,和之前的介绍的登录方式一样,只是多了tenant参数.本篇将介绍在Abp vNext授权服务中启用多租户 ...

  8. [Abp vNext微服务实践] - 服务通讯

    简介 服务通讯是微服务架构中必不可少的功能,服务通讯的效率决定了微服务架构的优略.常用的微服务通讯策略有两种,分别是rpc.http,其中rpc以gRpc框架为代表使用者最多.abp vNext微服务 ...

  9. [Abp vNext微服务实践] - 添加中文语言

    简介 abp vNext中提供了多语言功能,默认语言是英文,没有提供中文语言包.在业务开发中,定义权限后需要用中文的备注提供角色选择,本篇将介绍如何在abp vNext中加入中文语言. step1:添 ...

随机推荐

  1. swift 第十课 cocopod 网络请求 Alamofire

    这个 cocopod 真的是不容易,差点就放弃了…… 还好,我足够的坚持…… 还是首先说下具体的步骤,希望能记得足够的详细…… 1.打开终端,cd 到自己项目的文件夹 cd 文件路径 2.执行 vim ...

  2. webdriervAPI(上传文件)

    from  selenium  import  webdriver driver  =  webdriver.Chorme() drvier.implicitly_wait(10) driver.ge ...

  3. Sed---linux系统三剑客(二)

    grep .sed.awk被称为linux中的"三剑客". grep 更适合单纯的查找或匹配文本 sed  更适合编辑匹配到的文本 awk  更适合格式化文本,对文本进行较复杂格式 ...

  4. zepto手机拼音字母城市选择器代码

    <!doctype html> <html> <head> <meta http-equiv="Content-Type" content ...

  5. 我的vim开发环境搭建:C/C++/Go,持续更新中

    懒得在github博客上折腾评论功能,先借用博客园推广下,虽然好像也没什么用. 我的vim开发环境搭建(1): 准备工作 我的vim开发环境搭建(2): 常用的vim插件 我的vim开发环境搭建(3) ...

  6. 洛谷 题解 P1352 【没有上司的舞会】

    树形DP的一道较为基础的模板题 状态 dp[i][0/1]为第i个员工是否来参加的最大值 转移 先找到根节点 先遍历完它的儿子,再来更新答案 dp[i][0]+=max(dp[j][0],dp[j][ ...

  7. IO-file 01 名称或路径

    package com.bwie.io; import java.io.File; /** * 名称或路径 * [getName:名称 * getPath * getAbsolutePath:绝对路径 ...

  8. [转帖]linux各种IPC机制

    linux各种IPC机制 docker中的资源隔离,一种就是IPC的隔离.IPC是进程间通信. 下面的文章转载自https://blog.csdn.net/yyq_9623/article/detai ...

  9. No package 'eventlog' found

    syslog-ng のインスト�ル手� ●ダウンロ�ドサイト http://www.balabit.com/downloads/files/syslog-ng/sources/stable/src/ ...

  10. CREATE TABLE——数据定义语言 (Data Definition Language, DDL)

    Sql语句分为三大类: 数据定义语言,负责创建,修改,删除表,索引和视图等对象: 数据操作语言,负责数据库中数据的插入,查询,删除等操作: 数据控制语言,用来授予和撤销用户权限. 数据定义语言 (Da ...