增加验证码校验

dev
smallchill 6 years ago
parent 6d87153399
commit d76bd3a7e4
  1. 17
      src/api/user.js
  2. 46
      src/page/login/userlogin.vue
  3. 2
      src/store/modules/user.js
  4. 1
      src/styles/login.scss

@ -1,21 +1,23 @@
import request from '@/router/axios'; import request from '@/router/axios';
import { baseUrl } from '@/config/env'; import { baseUrl } from '@/config/env';
export const loginByUsername = (tenantId, username, password, type) => request({ export const loginByUsername = (tenantId, username, password, type, key, code) => request({
url: '/api/blade-auth/oauth/token', url: '/api/blade-auth/oauth/token',
method: 'post', method: 'post',
headers: { headers: {
'Tenant-Id': tenantId 'Tenant-Id': tenantId,
'Captcha-Key': key,
'Captcha-Code': code,
}, },
params: { params: {
tenantId, tenantId,
username, username,
password, password,
grant_type: "password", grant_type: "captcha",
scope: "all", scope: "all",
type type
} }
}) });
export const refreshToken = (refresh_token, tenantId) => request({ export const refreshToken = (refresh_token, tenantId) => request({
url: '/api/blade-auth/oauth/token', url: '/api/blade-auth/oauth/token',
@ -29,13 +31,18 @@ export const refreshToken = (refresh_token, tenantId) => request({
grant_type: "refresh_token", grant_type: "refresh_token",
scope: "all", scope: "all",
} }
}) });
export const getButtons = () => request({ export const getButtons = () => request({
url: '/api/blade-system/menu/buttons', url: '/api/blade-system/menu/buttons',
method: 'get' method: 'get'
}); });
export const getCaptcha = () => request({
url: '/api/blade-auth/oauth/captcha',
method: 'get'
});
export const getUserInfo = () => request({ export const getUserInfo = () => request({
url: baseUrl + '/user/getUserInfo', url: baseUrl + '/user/getUserInfo',
method: 'get' method: 'get'

@ -34,11 +34,31 @@
<i slot="prefix" class="icon-mima"/> <i slot="prefix" class="icon-mima"/>
</el-input> </el-input>
</el-form-item> </el-form-item>
<el-form-item prop="code">
<el-row :span="24">
<el-col :span="16">
<el-input size="small"
@keyup.enter.native="handleLogin"
v-model="loginForm.code"
auto-complete="off"
:placeholder="$t('login.code')">
<i slot="prefix" class="icon-yanzhengma"/>
</el-input>
</el-col>
<el-col :span="8">
<div class="login-code">
<img :src="loginForm.image" class="login-code-img" @click="refreshCode"
/>
</div>
</el-col>
</el-row>
</el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" <el-button type="primary"
size="small" size="small"
@click.native.prevent="handleLogin" @click.native.prevent="handleLogin"
class="login-submit">{{$t('login.submit')}}</el-button> class="login-submit">{{$t('login.submit')}}
</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</template> </template>
@ -47,6 +67,7 @@
import {mapGetters} from "vuex"; import {mapGetters} from "vuex";
import website from '@/config/website'; import website from '@/config/website';
import {info} from "@/api/system/tenant"; import {info} from "@/api/system/tenant";
import {getCaptcha} from "@/api/user";
export default { export default {
name: "userlogin", name: "userlogin",
@ -54,10 +75,20 @@ export default {
return { return {
tenantMode: website.tenantMode, tenantMode: website.tenantMode,
loginForm: { loginForm: {
//ID
tenantId: "000000", tenantId: "000000",
//
username: "admin", username: "admin",
//
password: "admin", password: "admin",
type: "account" //
type: "account",
//
code: "",
//
key: "",
//
image: "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",
}, },
loginRules: { loginRules: {
tenantId: [ tenantId: [
@ -76,13 +107,22 @@ export default {
}, },
created() { created() {
this.getTenant(); this.getTenant();
this.refreshCode();
},
mounted() {
}, },
mounted() {},
computed: { computed: {
...mapGetters(["tagWel"]) ...mapGetters(["tagWel"])
}, },
props: [], props: [],
methods: { methods: {
refreshCode() {
getCaptcha().then(res => {
const data = res.data;
this.loginForm.key = data.key;
this.loginForm.image = data.image;
})
},
showPassword() { showPassword() {
this.passwordType === "" this.passwordType === ""
? (this.passwordType = "password") ? (this.passwordType = "password")

@ -47,7 +47,7 @@ const user = {
//根据用户名登录 //根据用户名登录
LoginByUsername({commit}, userInfo) { LoginByUsername({commit}, userInfo) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
loginByUsername(userInfo.tenantId, userInfo.username, userInfo.password, userInfo.type).then(res => { loginByUsername(userInfo.tenantId, userInfo.username, userInfo.password, userInfo.type, userInfo.key, userInfo.code).then(res => {
const data = res.data; const data = res.data;
if (data.error_description) { if (data.error_description) {
Message({ Message({

@ -180,4 +180,5 @@
line-height: 38px; line-height: 38px;
text-indent: 5px; text-indent: 5px;
text-align: center; text-align: center;
cursor:pointer!important;
} }

Loading…
Cancel
Save