浏览代码

user auth update

ali 3 年之前
父节点
当前提交
a567fee794
共有 5 个文件被更改,包括 263 次插入 和 69 次删除
  1. 3 3
      src/api/Addresses.js
  2. 93 4
      src/api/models/Auth.js
  3. 39 29
      src/components/Auth/ForgetStep.vue
  4. 75 33
      src/components/Auth/RegisterStep.vue
  5. 53 0
      src/store/Auth/actions.js

+ 3 - 3
src/api/Addresses.js

@@ -1,7 +1,7 @@
-// import process from 'process'
+import process from 'process'
 // process.client or process.browser
-// const server = process.env.API
-const server = '/api'
+const server = process.env.APP_API
+// const server = '/api'
 const API_ADDRESS = {
   auth: {
     login: server + '/auth/login',

+ 93 - 4
src/api/models/Auth.js

@@ -6,10 +6,11 @@ export default class AuthAPI extends APIRepository {
   constructor() {
     super('auth', appApi)
     this.APIAdresses = {
-      login: '/auth/login',
-      sendOtp: '/auth/send-otp',
-      signUp: '/auth/sign-up',
-      setPass: '/auth/set-pass',
+      login: '/uma/users/login',
+      sendOtp: '/uma/users/send_otp',
+      signUp: '/uma/users/sign_up',
+      setPass: '/uma/users/set_password',
+
       loginAdmin: '/auth/login',
       refreshToken: '/auth/refresh-token',
       changePass: '/auth/change-pass',
@@ -41,4 +42,92 @@ export default class AuthAPI extends APIRepository {
       }
     })
   }
+
+  sendOtpSignUp (data) {
+    return this.sendRequest({
+      apiMethod: 'post',
+      api: this.api,
+      request: this.APIAdresses.sendOtp,
+      data: this.getNormalizedSendData({
+        input: '', // String
+        action: 'SIGN_UP' // String
+      }, data),
+      resolveCallback: (response) => {
+        return response.data.message // String (ok)
+      },
+      rejectCallback: (error) => {
+        return error
+      }
+    })
+  }
+
+  sendOtpForgotPassword (data) {
+    return this.sendRequest({
+      apiMethod: 'post',
+      api: this.api,
+      request: this.APIAdresses.sendOtp,
+      data: this.getNormalizedSendData({
+        input: '', // String
+        action: 'FORGOT_PASSWORD' // String
+      }, data),
+      resolveCallback: (response) => {
+        return response.data.message // String (ok)
+      },
+      rejectCallback: (error) => {
+        return error
+      }
+    })
+  }
+
+  setPassword (data) {
+    return this.sendRequest({
+      apiMethod: 'post',
+      api: this.api,
+      request: this.APIAdresses.setPass,
+      data: this.getNormalizedSendData({
+        input: '', // String
+        password: '', // String
+        otp: '' // String
+      }, data),
+      resolveCallback: (response) => {
+        const accessToken = response.data.token.access_token
+        const ca = accessToken
+        const base64Url = ca.split('.')[1]
+        const decodedValue = JSON.parse(window.atob(base64Url))
+        const user = new User(decodedValue)
+
+        return { accessToken, user }
+      },
+      rejectCallback: (error) => {
+        return error
+      }
+    })
+  }
+
+  signUp (data) {
+    return this.sendRequest({
+      apiMethod: 'post',
+      api: this.api,
+      request: this.APIAdresses.signUp,
+      data: this.getNormalizedSendData({
+        input: '', // String
+        password: '', // String
+        otp: '', // String
+        firstname: '', // String
+        lastname: '' // String
+      }, data),
+      resolveCallback: (response) => {
+        const accessToken = response.data.token.access_token
+        const ca = accessToken
+        const base64Url = ca.split('.')[1]
+        const decodedValue = JSON.parse(window.atob(base64Url))
+        const user = new User(decodedValue)
+
+        return { accessToken, user }
+      },
+      rejectCallback: (error) => {
+        return error
+      }
+    })
+  }
 }

+ 39 - 29
src/components/Auth/ForgetStep.vue

@@ -45,26 +45,13 @@
                class="username-input"
                label=""
                :disable="loading"
-               :loading="loading"
-               @keydown.enter="verify" />
+               :loading="loading" />
       <div class="resend-timer-message">
         <span class="resend-timer-message-value">
           {{ formatedTimer }}
         </span>
         تا درخواست مجدد
       </div>
-      <q-btn class="full-width btn-verifyUsername"
-             color="primary"
-             label="تایید و ادامه"
-             :disable="loading"
-             :loading="loading"
-             @click="verify" />
-      <div class="go-to-set-username-message"
-           @click="goToGetUsernameStep">
-        تغییر شماره تلفن همراه یا استفاده از آدرس ایمیل
-      </div>
-    </template>
-    <template v-else-if="registerStep === 'newPassword'">
       <label class="password-label"
              for="password">
         گذرواژه
@@ -74,7 +61,7 @@
                outlined
                class="password-input"
                label="گذرواژه جدید خود را وارد کنید"
-               @keydown.enter="setNewPassword">
+               @keydown.enter="verify">
         <template v-slot:prepend>
           <q-icon name="person" />
         </template>
@@ -82,6 +69,35 @@
           <q-icon name="person" />
         </template>
       </q-input>
+      <q-btn class="full-width btn-verifyUsername"
+             color="primary"
+             label="تایید و ورود"
+             :disable="loading"
+             :loading="loading"
+             @click="verify" />
+      <div class="go-to-set-username-message"
+           @click="goToGetUsernameStep">
+        تغییر شماره تلفن همراه یا استفاده از آدرس ایمیل
+      </div>
+    </template>
+    <template v-else-if="registerStep === 'newPassword'">
+      <!--      <label class="password-label"-->
+      <!--             for="password">-->
+      <!--        گذرواژه-->
+      <!--      </label>-->
+      <!--      <q-input id="password"-->
+      <!--               v-model="password"-->
+      <!--               outlined-->
+      <!--               class="password-input"-->
+      <!--               label="گذرواژه جدید خود را وارد کنید"-->
+      <!--               @keydown.enter="setNewPassword">-->
+      <!--        <template v-slot:prepend>-->
+      <!--          <q-icon name="person" />-->
+      <!--        </template>-->
+      <!--        <template v-slot:append>-->
+      <!--          <q-icon name="person" />-->
+      <!--        </template>-->
+      <!--      </q-input>-->
       <q-btn class="full-width btn-login"
              color="primary"
              label="تایید و ورود"
@@ -93,6 +109,7 @@
 <script>
 import API_ADDRESS from 'src/api/Addresses.js'
 import { mixinAuth } from 'src/mixin/Mixins.js'
+import { APIGateway } from 'src/api/APIGateway'
 
 export default {
   name: 'ForgetStep',
@@ -214,9 +231,8 @@ export default {
         return
       }
       this.loading = true
-      this.$axios.post(API_ADDRESS.auth.sendOtp, {
-        input: this.username,
-        action: 'forgot-password'
+      APIGateway.auth.sendOtpForgotPassword({
+        input: this.username
       })
         .then(() => {
           this.restartOtpInterval()
@@ -232,21 +248,15 @@ export default {
         return
       }
       this.loading = true
-      this.$axios.post(API_ADDRESS.auth.login, {
+      this.$store.dispatch('Auth/setPassword', {
         input: this.username,
+        password: this.password,
         otp: this.verifyNumber
       })
-        .then((response) => {
+        .then(() => {
           this.loading = false
-          const accessToken = response.data.token.access_token
-          this.$axios.defaults.headers.common.Authorization = 'Bearer ' + accessToken
-          this.$store.commit('Auth/updateAccessToken', accessToken)
-          this.$store.commit('Auth/setAccessToken', accessToken)
-          const ca = accessToken
-          const base64Url = ca.split('.')[1]
-          const decodedValue = JSON.parse(window.atob(base64Url))
-          this.$store.commit('Auth/updateUser', decodedValue)
-          this.setRegisterStep('newPassword')
+          this.redirectTo()
+          // this.setRegisterStep('newPassword')
         })
         .catch(() => {
           this.loading = false

+ 75 - 33
src/components/Auth/RegisterStep.vue

@@ -64,18 +64,7 @@
         </span>
         تا درخواست مجدد
       </div>
-      <q-btn class="full-width btn-verifyUsername"
-             color="primary"
-             label="تایید و ادامه"
-             :disable="loading"
-             :loading="loading"
-             @click="verify" />
-      <div class="go-to-set-username-message"
-           @click="goToGetUsernameStep">
-        تغییر شماره تلفن همراه یا استفاده از آدرس ایمیل
-      </div>
-    </template>
-    <template v-else-if="registerStep === 'information'">
+
       <div class="information-top-message">
         لطفا اطلاعات کاربری خود را وارد کنید.
       </div>
@@ -87,7 +76,7 @@
                outlined
                class="name-input"
                label="نام خود را وارد کنید"
-               @keydown.enter="register">
+               @keydown.enter="verify">
         <template v-slot:prepend>
           <q-icon name="person" />
         </template>
@@ -100,7 +89,7 @@
                outlined
                class="lastname-input"
                label="نام خانوادگی خود را وارد کنید"
-               @keydown.enter="register">
+               @keydown.enter="verify">
         <template v-slot:prepend>
           <q-icon name="person" />
         </template>
@@ -114,7 +103,7 @@
                outlined
                class="password-input"
                label="گذرواژه خود را وارد کنید"
-               @keydown.enter="register">
+               @keydown.enter="verify">
         <template v-slot:prepend>
           <q-icon name="person" />
         </template>
@@ -122,10 +111,69 @@
           <q-icon name="person" />
         </template>
       </q-input>
-      <q-btn class="full-width btn-login"
+
+      <q-btn class="full-width btn-verifyUsername"
              color="primary"
              label="ثبت نام"
-             @click="register" />
+             :disable="loading"
+             :loading="loading"
+             @click="verify" />
+      <div class="go-to-set-username-message"
+           @click="goToGetUsernameStep">
+        تغییر شماره تلفن همراه یا استفاده از آدرس ایمیل
+      </div>
+    </template>
+    <template v-else-if="registerStep === 'information'">
+      <div class="information-top-message">
+        لطفا اطلاعات کاربری خود را وارد کنید.
+      </div>
+      <!--      <label for="name">-->
+      <!--        نام-->
+      <!--      </label>-->
+      <!--      <q-input id="name"-->
+      <!--               v-model="firstname"-->
+      <!--               outlined-->
+      <!--               class="name-input"-->
+      <!--               label="نام خود را وارد کنید"-->
+      <!--               @keydown.enter="register">-->
+      <!--        <template v-slot:prepend>-->
+      <!--          <q-icon name="person" />-->
+      <!--        </template>-->
+      <!--      </q-input>-->
+      <!--      <label for="lastname">-->
+      <!--        نام خانوادگی-->
+      <!--      </label>-->
+      <!--      <q-input id="lastname"-->
+      <!--               v-model="lastname"-->
+      <!--               outlined-->
+      <!--               class="lastname-input"-->
+      <!--               label="نام خانوادگی خود را وارد کنید"-->
+      <!--               @keydown.enter="register">-->
+      <!--        <template v-slot:prepend>-->
+      <!--          <q-icon name="person" />-->
+      <!--        </template>-->
+      <!--      </q-input>-->
+      <!--      <label class="password-label"-->
+      <!--             for="password">-->
+      <!--        گذرواژه-->
+      <!--      </label>-->
+      <!--      <q-input id="password"-->
+      <!--               v-model="password"-->
+      <!--               outlined-->
+      <!--               class="password-input"-->
+      <!--               label="گذرواژه خود را وارد کنید"-->
+      <!--               @keydown.enter="register">-->
+      <!--        <template v-slot:prepend>-->
+      <!--          <q-icon name="person" />-->
+      <!--        </template>-->
+      <!--        <template v-slot:append>-->
+      <!--          <q-icon name="person" />-->
+      <!--        </template>-->
+      <!--      </q-input>-->
+      <!--      <q-btn class="full-width btn-login"-->
+      <!--             color="primary"-->
+      <!--             label="ثبت نام"-->
+      <!--             @click="register" />-->
     </template>
   </div>
 </template>
@@ -133,6 +181,7 @@
 <script>
 import API_ADDRESS from 'src/api/Addresses.js'
 import { mixinAuth } from 'src/mixin/Mixins.js'
+import { APIGateway } from 'src/api/APIGateway'
 
 export default {
   name: 'RegisterStep',
@@ -258,10 +307,7 @@ export default {
         return
       }
       this.loading = true
-      this.$axios.post(API_ADDRESS.auth.sendOtp, {
-        input: this.username,
-        action: 'sign-up'
-      })
+      APIGateway.auth.sendOtpSignUp({ input: this.username })
         .then(() => {
           this.loading = false
           this.restartOtpInterval()
@@ -278,21 +324,17 @@ export default {
         return
       }
       this.loading = true
-      this.$axios.post(API_ADDRESS.auth.signUp, {
+      this.$store.dispatch('Auth/signUp', {
         input: this.username,
-        otp: this.verifyNumber
+        otp: this.verifyNumber,
+        password: this.password,
+        firstname: this.firstname,
+        lastname: this.lastname
       })
-        .then((response) => {
+        .then(() => {
           this.loading = false
-          const accessToken = response.data.token.access_token
-          this.$axios.defaults.headers.common.Authorization = 'Bearer ' + accessToken
-          this.$store.commit('Auth/updateAccessToken', accessToken)
-          this.$store.commit('Auth/setAccessToken', accessToken)
-          const ca = accessToken
-          const base64Url = ca.split('.')[1]
-          const decodedValue = JSON.parse(window.atob(base64Url))
-          this.$store.commit('Auth/updateUser', decodedValue)
-          this.setRegisterStep('information')
+          this.$router.push({ name: 'Public.Home' })
+          // this.setRegisterStep('information')
         })
         .catch(() => {
           this.loading = false

+ 53 - 0
src/store/Auth/actions.js

@@ -32,6 +32,59 @@ export function login (context, data) {
       })
   })
 }
+
+export function signUp (context, data) {
+  const setVars = (user, accessToken) => {
+    context.commit('updateUser', user)
+    context.commit('updateAccessToken', accessToken)
+    if (typeof window !== 'undefined') {
+      Cookies.set('BearerAccessToken', accessToken, {
+        // domain: '.' + window.location.host,
+        path: '/',
+        expires: '365d'
+      })
+    }
+    context.commit('updateAxiosAuthorization', accessToken)
+  }
+  return new Promise((resolve, reject) => {
+    APIGateway.auth.signUp(data)
+      .then(({ user, accessToken }) => {
+        setVars(user, accessToken)
+        context.commit('updateUser', user)
+        resolve({ accessToken, user })
+      })
+      .catch(() => {
+        reject()
+      })
+  })
+}
+
+export function setPassword (context, data) {
+  const setVars = (user, accessToken) => {
+    context.commit('updateUser', user)
+    context.commit('updateAccessToken', accessToken)
+    if (typeof window !== 'undefined') {
+      Cookies.set('BearerAccessToken', accessToken, {
+        // domain: '.' + window.location.host,
+        path: '/',
+        expires: '365d'
+      })
+    }
+    context.commit('updateAxiosAuthorization', accessToken)
+  }
+  return new Promise((resolve, reject) => {
+    APIGateway.auth.setPassword(data)
+      .then(({ user, accessToken }) => {
+        setVars(user, accessToken)
+        context.commit('updateUser', user)
+        resolve({ accessToken, user })
+      })
+      .catch(() => {
+        reject()
+      })
+  })
+}
+
 export function logOut (context, payload) {
   const redirectTo = payload?.redirectTo
   const clearRedirectTo = payload?.clearRedirectTo