瀏覽代碼

fix: client login

NGPixel 7 年之前
父節點
當前提交
4b0428212d

+ 31 - 33
client/components/login.vue

@@ -86,10 +86,12 @@ export default {
     }
     }
   },
   },
   mounted () {
   mounted () {
-    this.refreshStrategies()
     this.$refs.iptEmail.focus()
     this.$refs.iptEmail.focus()
   },
   },
   methods: {
   methods: {
+    /**
+     * SELECT STRATEGY
+     */
     selectStrategy (key, useForm) {
     selectStrategy (key, useForm) {
       this.selectedStrategy = key
       this.selectedStrategy = key
       this.screen = 'login'
       this.screen = 'login'
@@ -100,28 +102,10 @@ export default {
         this.$refs.iptEmail.focus()
         this.$refs.iptEmail.focus()
       }
       }
     },
     },
-    refreshStrategies () {
-      this.isLoading = true
-      this.$apollo.query({
-        query: strategiesQuery
-      }).then(resp => {
-        if (_.has(resp, 'data.authentication.providers')) {
-          this.strategies = _.get(resp, 'data.authentication.providers', [])
-        } else {
-          throw new Error('No authentication providers available!')
-        }
-        this.isLoading = false
-      }).catch(err => {
-        console.error(err)
-        this.$store.commit('showNotification', {
-          style: 'red',
-          message: err.message,
-          icon: 'warning'
-        })
-        this.isLoading = false
-      })
-    },
-    login () {
+    /**
+     * LOGIN
+     */
+    async login () {
       if (this.username.length < 2) {
       if (this.username.length < 2) {
         this.$store.commit('showNotification', {
         this.$store.commit('showNotification', {
           style: 'red',
           style: 'red',
@@ -138,14 +122,15 @@ export default {
         this.$refs.iptPassword.focus()
         this.$refs.iptPassword.focus()
       } else {
       } else {
         this.isLoading = true
         this.isLoading = true
-        this.$apollo.mutate({
-          mutation: loginMutation,
-          variables: {
-            username: this.username,
-            password: this.password,
-            provider: this.selectedStrategy
-          }
-        }).then(resp => {
+        try {
+          let resp = await this.$apollo.mutate({
+            mutation: loginMutation,
+            variables: {
+              username: this.username,
+              password: this.password,
+              strategy: this.selectedStrategy
+            }
+          })
           if (_.has(resp, 'data.authentication.login')) {
           if (_.has(resp, 'data.authentication.login')) {
             let respObj = _.get(resp, 'data.authentication.login', {})
             let respObj = _.get(resp, 'data.authentication.login', {})
             if (respObj.responseResult.succeeded === true) {
             if (respObj.responseResult.succeeded === true) {
@@ -173,7 +158,7 @@ export default {
           } else {
           } else {
             throw new Error('Authentication is unavailable.')
             throw new Error('Authentication is unavailable.')
           }
           }
-        }).catch(err => {
+        } catch (err) {
           console.error(err)
           console.error(err)
           this.$store.commit('showNotification', {
           this.$store.commit('showNotification', {
             style: 'red',
             style: 'red',
@@ -181,9 +166,12 @@ export default {
             icon: 'warning'
             icon: 'warning'
           })
           })
           this.isLoading = false
           this.isLoading = false
-        })
+        }
       }
       }
     },
     },
+    /**
+     * VERIFY TFA CODE
+     */
     verifySecurityCode () {
     verifySecurityCode () {
       if (this.securityCode.length !== 6) {
       if (this.securityCode.length !== 6) {
         this.$store.commit('showNotification', {
         this.$store.commit('showNotification', {
@@ -230,6 +218,16 @@ export default {
         })
         })
       }
       }
     }
     }
+  },
+  apollo: {
+    strategies: {
+      query: strategiesQuery,
+      update: (data) => data.authentication.strategies,
+      watchLoading (isLoading) {
+        this.isLoading = isLoading
+        this.$store.commit(`loading${isLoading ? 'Start' : 'Stop'}`, 'login-strategies-refresh')
+      }
+    }
   }
   }
 }
 }
 </script>
 </script>

+ 2 - 2
client/graph/login-mutation-login.gql

@@ -1,6 +1,6 @@
-mutation($username: String!, $password: String!, $provider: String!) {
+mutation($username: String!, $password: String!, $strategy: String!) {
   authentication {
   authentication {
-    login(username: $username, password: $password, provider: $provider) {
+    login(username: $username, password: $password, strategy: $strategy) {
       responseResult {
       responseResult {
         succeeded
         succeeded
         errorCode
         errorCode

+ 1 - 1
client/graph/login-query-strategies.gql

@@ -1,6 +1,6 @@
 query {
 query {
   authentication {
   authentication {
-    providers(
+    strategies(
       filter: "isEnabled eq true",
       filter: "isEnabled eq true",
       orderBy: "title ASC"
       orderBy: "title ASC"
     ) {
     ) {

文件差異過大導致無法顯示
+ 0 - 9
client/static/svg/henry-reading.svg


+ 2 - 2
server/db/models/users.js

@@ -171,13 +171,13 @@ module.exports = class User extends Model {
   }
   }
 
 
   static async login (opts, context) {
   static async login (opts, context) {
-    if (_.has(WIKI.config.auth.strategies, opts.provider)) {
+    if (_.has(WIKI.auth.strategies, opts.strategy)) {
       _.set(context.req, 'body.email', opts.username)
       _.set(context.req, 'body.email', opts.username)
       _.set(context.req, 'body.password', opts.password)
       _.set(context.req, 'body.password', opts.password)
 
 
       // Authenticate
       // Authenticate
       return new Promise((resolve, reject) => {
       return new Promise((resolve, reject) => {
-        WIKI.auth.passport.authenticate(opts.provider, async (err, user, info) => {
+        WIKI.auth.passport.authenticate(opts.strategy, async (err, user, info) => {
           if (err) { return reject(err) }
           if (err) { return reject(err) }
           if (!user) { return reject(new WIKI.Error.AuthLoginFailed()) }
           if (!user) { return reject(new WIKI.Error.AuthLoginFailed()) }
 
 

+ 1 - 1
server/graph/resolvers/authentication.js

@@ -16,7 +16,7 @@ module.exports = {
   },
   },
   AuthenticationQuery: {
   AuthenticationQuery: {
     async strategies(obj, args, context, info) {
     async strategies(obj, args, context, info) {
-      let strategies = await WIKI.db.authentication.query().orderBy('title')
+      let strategies = await WIKI.db.authentication.getEnabledStrategies()
       strategies = strategies.map(stg => ({
       strategies = strategies.map(stg => ({
         ...stg,
         ...stg,
         config: _.transform(stg.config, (res, value, key) => {
         config: _.transform(stg.config, (res, value, key) => {

+ 2 - 2
server/graph/schemas/authentication.graphql

@@ -29,7 +29,7 @@ type AuthenticationMutation {
   login(
   login(
     username: String!
     username: String!
     password: String!
     password: String!
-    provider: String!
+    strategy: String!
   ): AuthenticationLoginResponse
   ): AuthenticationLoginResponse
 
 
   loginTFA(
   loginTFA(
@@ -38,7 +38,7 @@ type AuthenticationMutation {
   ): DefaultResponse
   ): DefaultResponse
 
 
   updateStrategy(
   updateStrategy(
-    provider: String!
+    strategy: String!
     isEnabled: Boolean!
     isEnabled: Boolean!
     config: [KeyValuePairInput]
     config: [KeyValuePairInput]
   ): DefaultResponse
   ): DefaultResponse

+ 1 - 1
server/jobs/sync-graph-locales.js

@@ -38,7 +38,7 @@ module.exports = async (job) => {
 
 
     // -> Download locale strings
     // -> Download locale strings
 
 
-    if (WIKI.config.langAutoUpdate) {
+    if (WIKI.config.lang.autoUpdate) {
       const respStrings = await apollo({
       const respStrings = await apollo({
         query: `query ($code: String!) {
         query: `query ($code: String!) {
           localization {
           localization {

+ 1 - 1
server/middlewares/auth.js

@@ -7,7 +7,7 @@ module.exports = (req, res, next) => {
   // Is user authenticated ?
   // Is user authenticated ?
 
 
   if (!req.isAuthenticated()) {
   if (!req.isAuthenticated()) {
-    if (WIKI.config.auth.public !== true) {
+    if (WIKI.config.public !== true) {
       return res.redirect('/login')
       return res.redirect('/login')
     } else {
     } else {
       // req.user = rights.guest
       // req.user = rights.guest

部分文件因文件數量過多而無法顯示