Рефакторинг кода для выполнения вызовов базы данных вместо использования локального хранилища - PullRequest
0 голосов
/ 22 октября 2018

Код ниже обрабатывает аутентификацию для приложения Vue.js.Он хранит и восстанавливает некоторые важные значения в локальном хранилище.Как мне выполнить рефакторинг этого кода, чтобы получить и установить значения expiresAt, idToken, accessToken и user из памяти вместо локального хранилища?

import auth0 from 'auth0-js'
import Vue from 'vue'

let webAuth = new auth0.WebAuth({
domain: 'your_auth0_domain',
clientID: 'your_auth0_client',

redirectUri: 'http://localhost:8080/callback',

audience: 'https://' + 'your_auth0_domain' + '/api/v2/',
responseType: 'token id_token',
scope: 'openid profile' // define the scopes you want to use
})

let auth = new Vue({
computed: {
    token: {
        get: function () {
            return localStorage.getItem('id_token')
        },
        set: function (id_token) {
            localStorage.setItem('id_token', id_token)
        }
    },
    accessToken: {
        get: function () {
            return localStorage.getItem('access_token')
        },
        set: function (accessToken) {
            localStorage.setItem('access_token', accessToken)
        }
    },
    expiresAt: {
        get: function () {
            return localStorage.getItem('expires_at')
        },
        set: function (expiresIn) {
            let expiresAt = JSON.stringify(expiresIn * 1000 + new Date().getTime())
            localStorage.setItem('expires_at', expiresAt)
        }
    },
    user: {
        get: function () {
            return JSON.parse(localStorage.getItem('user'))
        },
        set: function (user) {
            localStorage.setItem('user', JSON.stringify(user))
        }
    }
},
methods: {
    login() {
        webAuth.authorize()
    },
    logout() {
        return new Promise((resolve, reject) => {
            localStorage.removeItem('access_token')
            localStorage.removeItem('id_token')
            localStorage.removeItem('expires_at')
            localStorage.removeItem('user')
            webAuth.authorize()

        })
    },
    isAuthenticated() {
        return new Date().getTime() < this.expiresAt
    },
    handleAuthentication() {
        return new Promise((resolve, reject) => {
            webAuth.parseHash((err, authResult) => {

                if (authResult && authResult.accessToken && authResult.idToken) {
                    this.expiresAt = authResult.expiresIn
                    this.accessToken = authResult.accessToken
                    this.token = authResult.idToken
                    this.user = authResult.idTokenPayload

                    resolve()


                } else if (err) {
                    this.logout()
                    reject(err)
                }

            })
        })
    }
}
})

export default {
install: function (Vue) {
    Vue.prototype.$auth = auth
}
}
...