Browse Source

ew-construct oidc

Tao Chen 1 year ago
parent
commit
9706a6d7d1

+ 1 - 0
src/store/user.js

@@ -10,6 +10,7 @@ export const useUserStore = defineStore({
10 10
   state: () => ({
11 11
     nickname: '',
12 12
     username: '',
13
+    email: '',
13 14
     token: '',
14 15
     role: '',
15 16
     avatar: '',

+ 3 - 0
src/utils/i18n/zh_CN.json

@@ -457,5 +457,8 @@
457 457
   },
458 458
   "UserToken": {
459 459
     "One": "用户Token"
460
+  },
461
+  "Email": {
462
+    "One": "邮箱"
460 463
   }
461 464
 }

+ 4 - 4
src/views/login/login.vue

@@ -93,10 +93,10 @@ import webauthImage from '@/assets/webauth.png';
93 93
 import defaultImage from '@/assets/oidc.png';
94 94
 
95 95
 const providerImageMap = {
96
-  google: googleImage,
97
-  github: githubImage,
98
-  oidc: oidcImage,
99
-  webauth: webauthImage,
96
+  Google: googleImage,
97
+  GitHub: githubImage,
98
+  OIDC: oidcImage,
99
+  WebAuth: webauthImage,
100 100
   default: defaultImage,
101 101
 };
102 102
 

+ 6 - 3
src/views/my/info.vue

@@ -5,12 +5,15 @@
5 5
         <el-form-item :label="T('Username')">
6 6
           <div>{{ userStore.username }}</div>
7 7
         </el-form-item>
8
+        <el-form-item :label="T('Email')">
9
+          <div>{{ userStore.email }}</div>
10
+        </el-form-item>
8 11
         <el-form-item :label="T('Password')" prop="password">
9 12
           <el-button type="danger" @click="showChangePwd">{{ T('ChangePassword') }}</el-button>
10 13
         </el-form-item>
11 14
         <el-form-item label="OIDC">
12 15
           <el-table :data="oidcData" border fit>
13
-            <el-table-column :label="T('Platform')" prop="third_type" align="center"></el-table-column>
16
+            <el-table-column :label="T('IdP')" prop="op" align="center"></el-table-column>
14 17
             <el-table-column :label="T('Status')" prop="status" align="center">
15 18
               <template #default="{ row }">
16 19
                 <el-tag v-if="row.status === 1" type="success">{{ T('HasBind') }}</el-tag>
@@ -55,7 +58,7 @@
55 58
   }
56 59
   getMyOauth()
57 60
   const toBind = async (row) => {
58
-    const res = await bind({ op: row.third_type }).catch(_ => false)
61
+    const res = await bind({ op: row.op}).catch(_ => false)
59 62
     if (res) {
60 63
       const { code, url } = res.data
61 64
       window.open(url)
@@ -70,7 +73,7 @@
70 73
     if (!cf) {
71 74
       return false
72 75
     }
73
-    const res = await unbind({ op: row.third_type }).catch(_ => false)
76
+    const res = await unbind({ op: row.op }).catch(_ => false)
74 77
     if (res) {
75 78
       getMyOauth()
76 79
     }

+ 16 - 9
src/views/oauth/index.vue

@@ -11,7 +11,8 @@
11 11
     <el-card class="list-body" shadow="hover">
12 12
       <el-table :data="listRes.list" v-loading="listRes.loading" border>
13 13
         <el-table-column prop="id" label="ID" align="center"/>
14
-        <el-table-column prop="op" :label="T('Platform')" align="center"/>
14
+        <el-table-column prop="op" :label="T('IdP')" align="center"/>
15
+        <el-table-column prop="oauth_type" :label="T('Type')" align="center"/>
15 16
         <el-table-column prop="auto_register" :label="T('AutoRegister')" align="center"/>
16 17
         <el-table-column prop="created_at" :label="T('CreatedAt')" align="center"/>
17 18
         <el-table-column prop="updated_at" :label="T('UpdatedAt')" align="center"/>
@@ -34,17 +35,20 @@
34 35
     </el-card>
35 36
     <el-dialog v-model="formVisible" :title="!formData.id?T('Create') :T('Update')" width="800">
36 37
       <el-form class="dialog-form" ref="form" :model="formData" :rules="rules" label-width="120px">
37
-        <el-form-item label="Type" prop="op">
38
-          <el-radio-group v-model="formData.op" :disabled="!!formData.id">
39
-            <el-radio v-for="item in ops" :key="item.value" :value="item.value" style="display: block">
38
+        <el-form-item label="Type" prop="">
39
+          <el-radio-group v-model="formData.oauth_type" :disabled="!!formData.id">
40
+            <el-radio v-for="item in types" :key="item.value" :value="item.value" style="display: block">
40 41
               {{ item.label }}
41 42
             </el-radio>
42 43
           </el-radio-group>
43 44
         </el-form-item>
44
-        <el-form-item v-if="formData.op === 'oidc'" label="Issuer" prop="issuer">
45
+        <el-form-item v-if="formData.oauth_type === 'oidc'" label="IdP" prop="op">
46
+          <el-input v-model="formData.op" :placeholder="T('Your IdP Name')"></el-input>
47
+        </el-form-item>
48
+        <el-form-item v-if="formData.oauth_type === 'oidc'" label="Issuer" prop="issuer">
45 49
           <el-input v-model="formData.issuer" :placeholder="`${T('Check your IdP docs, without')} '/.well-known/openid-configuration'`"></el-input>
46 50
         </el-form-item>
47
-        <el-form-item v-show="formData.op === 'oidc'" label="Scopes" prop="scopes">
51
+        <el-form-item v-show="formData.oauth_type === 'oidc'" label="Scopes" prop="scopes">
48 52
           <el-input v-model="formData.scopes" :placeholder="`${T('Optional, default is')} 'openid,profile,email'`" ></el-input>
49 53
         </el-form-item>
50 54
         <el-form-item label="ClientId" prop="client_id">
@@ -85,8 +89,8 @@
85 89
     page: 1,
86 90
     page_size: 10,
87 91
   })
88
-  const ops = [
89
-    { value: 'github', label: 'Github' },
92
+  const types = [
93
+    { value: 'github', label: 'GitHub' },
90 94
     { value: 'google', label: 'Google' },
91 95
     { value: 'oidc',   label: 'OIDC'   }
92 96
   ]
@@ -134,6 +138,7 @@
134 138
   const formData = reactive({
135 139
     id: 0,
136 140
     op: '',
141
+    oauth_type: '',
137 142
     issuer: '',
138 143
     client_id: '',
139 144
     client_secret: '',
@@ -145,13 +150,14 @@
145 150
     client_id: [{ required: true, message: T('ParamRequired', { param: 'client_id' }), trigger: 'blur' }],
146 151
     client_secret: [{ required: true, message: T('ParamRequired', { param: 'client_secret' }), trigger: 'blur' }],
147 152
     redirect_url: [{ required: true, message: T('ParamRequired', { param: 'redirect_url' }), trigger: 'blur' }],
148
-    op: [{ required: true, message: T('ParamRequired', { param: 'op' }), trigger: 'blur' }],
153
+    oauth_type: [{ required: true, message: T('ParamRequired', { param: 'oauth_type' }), trigger: 'blur' }],
149 154
     issuer: [{ required: true, message: T('ParamRequired', { param: 'issuer' }), trigger: 'blur' }],
150 155
   }
151 156
   const toEdit = (row) => {
152 157
     formVisible.value = true
153 158
     formData.id = row.id
154 159
     formData.op = row.op
160
+    formData.oauth_type = row.oauth_type
155 161
     formData.issuer = row.issuer
156 162
     formData.client_id = row.client_id
157 163
     formData.client_secret = row.client_secret
@@ -164,6 +170,7 @@
164 170
     formVisible.value = true
165 171
     formData.id = 0
166 172
     formData.op = ''
173
+    formData.oauth_type = ''
167 174
     formData.issuer = ''
168 175
     formData.client_id = ''
169 176
     formData.client_secret = ''

+ 1 - 0
src/views/user/composables/edit.js

@@ -38,6 +38,7 @@ export function useSubmit (form, id) {
38 38
   const router = useRouter()
39 39
   const rules = reactive({
40 40
     username: [{ required: true, message: T('ParamRequired', { param: T('Username') }) }],
41
+    email: [{ required: true, message: T('ParamRequired', { param: T('Email') }) }],
41 42
     group_id: [{ required: true, message: T('ParamRequired', { param: T('Group') }) }],
42 43
     // nickname: [{ required: true, message: '昵称是必须的' }],
43 44
     status: [{ required: true, message: T('ParamRequired', { param: T('Status') }) }],

+ 3 - 0
src/views/user/edit.vue

@@ -4,6 +4,9 @@
4 4
       <el-form-item :label="T('Username')" prop="username">
5 5
         <el-input v-model="form.username"></el-input>
6 6
       </el-form-item>
7
+      <el-form-item :label="T('Email')" prop="email">
8
+        <el-input v-model="form.email"></el-input>
9
+      </el-form-item>
7 10
       <el-form-item :label="T('Nickname')" prop="nickname">
8 11
         <el-input v-model="form.nickname"></el-input>
9 12
       </el-form-item>

+ 1 - 0
src/views/user/index.vue

@@ -15,6 +15,7 @@
15 15
       <el-table :data="listRes.list" v-loading="listRes.loading" border>
16 16
         <el-table-column prop="id" label="ID" align="center"></el-table-column>
17 17
         <el-table-column prop="username" :label="T('Username')" align="center"/>
18
+        <el-table-column prop="email" :label="T('Email')" align="center"/>
18 19
         <el-table-column prop="nickname" :label="T('Nickname')" align="center"/>
19 20
         <el-table-column :label="T('Group')" align="center">
20 21
           <template #default="{row}">