Blame view

src/auth/index.js 6.77 KB
8a0dd59d9   Digvijay Singh   first commit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
  import Vue from "vue";
  import createAuth0Client from "@auth0/auth0-spa-js";
  import router from '../router'
  import axios from 'axios'
  /** Define a default action to perform after authentication */
  const DEFAULT_REDIRECT_CALLBACK = () =>
      window.history.replaceState({}, document.title, window.location.pathname);
  
  let instance;
  
  /** Returns the current instance of the SDK */
  export const getInstance = () => instance;
  
  /** Creates an instance of the Auth0 SDK. If one has already been created, it returns that instance */
  export const useAuth0 = ({
      onRedirectCallback = DEFAULT_REDIRECT_CALLBACK,
      redirectUri = window.location.origin + '/intermediate',
      ...options
  }) => {
      if (instance) return instance;
  
      // The 'instance' is simply a Vue object
      instance = new Vue({
          data() {
              return {
                  loading: true,
                  isAuthenticated: false,
                  user: {},
                  auth0Client: null,
                  auth0Client1: null,
                  popupOpen: false,
                  error: null
              };
          },
          methods: {
              /** Authenticates the user using a popup window */
              async loginWithPopup(o) {
                  this.popupOpen = true;
  
                  try {
                      await this.auth0Client.loginWithPopup(o);
                  } catch (e) {
                      // eslint-disable-next-line
                      console.error(e);
                  } finally {
                      this.popupOpen = false;
                  }
  
                  this.user = await this.auth0Client.getUser();
                  this.isAuthenticated = true;
              },
              /** Handles the callback when logging in using a redirect */
              async handleRedirectCallback() {
                  this.loading = true;
                  try {
                      await this.auth0Client.handleRedirectCallback();
                      this.user = await this.auth0Client.getUser();
                      this.isAuthenticated = true;
                  } catch (e) {
                      this.error = e;
                  } finally {
                      this.loading = false;
                  }
              },
              /** Authenticates the user using the redirect method */
              loginWithRedirect(o) {
                  return this.auth0Client.loginWithRedirect(o);
              },
              /** Authenticates the user using the redirect method */
              loginWithRedirectSignup(o) {
                  return this.auth0Client1.loginWithRedirect(o);
              },
              /** Returns all the claims present in the ID token */
              getIdTokenClaims(o) {
                  return this.auth0Client.getIdTokenClaims(o);
              },
              /** Returns the access token. If the token is invalid or missing, a new one is retrieved */
              getTokenSilently(o) {
                  return this.auth0Client.getTokenSilently(o);
              },
              /** Gets the access token using a popup window */
  
              getTokenWithPopup(o) {
                  return this.auth0Client.getTokenWithPopup(o);
              },
              /** Logs the user out and removes their session on the authorization server */
              logout(o) {
                  return this.auth0Client.logout(o);
              }
          },
          /** Use this lifecycle method to instantiate the SDK client */
          async created() {
              // Create a new instance of the SDK client using members of the given options object
              this.auth0Client = await createAuth0Client({
                  domain: options.domain,
                  client_id: options.clientId,
                  audience: options.audience,
                  redirect_uri: redirectUri
              });
  
              this.auth0Client1 = await createAuth0Client({
                  domain: options.domain,
                  client_id: options.clientId,
                  audience: options.audience,
                  redirect_uri: redirectUri,
                  signup: 'yes'
              });
  
              try {
                  // If the user is returning to the app after authentication..
                  if (
                      window.location.search.includes("code=") &&
                      window.location.search.includes("state=")
                  ) {
                      // handle the redirect and retrieve tokens
                      const { appState } = await this.auth0Client.handleRedirectCallback();
                      const u = await this.auth0Client.getUser();
49055248c   Digvijay Singh   offline synching
118
                      console.log("u", u)
298fff252   Digvijay Singh   new design added
119
120
                      axios.post('/profile', {
                          name: u.name,
8a0dd59d9   Digvijay Singh   first commit
121
                          email: u.email,
5684145ce   Digvijay Singh   reset password,ot...
122
123
124
                          firstName: u.given_name,
                          lastName: u.family_name,
                          verified: true
298fff252   Digvijay Singh   new design added
125
                          // profileImage: u.picture
8a0dd59d9   Digvijay Singh   first commit
126
                      }).then(res => {
49055248c   Digvijay Singh   offline synching
127
                          console.log("res", res);
4234f1fc0   Digvijay Singh   profile module added
128
                          this.$toaster.success(res.data.message);
298fff252   Digvijay Singh   new design added
129
                          localStorage.setItem('spotlight_usertoken', JSON.stringify(res.data.data))
49055248c   Digvijay Singh   offline synching
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
  
                          var previousUrl = localStorage.getItem("previous_url_spotlight");
                          console.log("onboarding", previousUrl)
                          if (!previousUrl) {
                              router.push({ name: 'Profile' });
                          } else {
                              previousUrl = JSON.parse(previousUrl);
                              console.log("onboarding-2", previousUrl)
                              router.push({
                                  name: previousUrl.ur,
                                  params: {
                                      caseStudyId: previousUrl.caseStudyId,
                                      slideId: previousUrl.slideId,
                                  },
                              });
                              localStorage.removeItem("previous_url_spotlight");
  
                          }
8a0dd59d9   Digvijay Singh   first commit
148
149
150
                      }).catch(err => {
                          console.log(err)
                      })
5684145ce   Digvijay Singh   reset password,ot...
151

8a0dd59d9   Digvijay Singh   first commit
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
                      // Notify subscribers that the redirect callback has happened, passing the appState
                      // (useful for retrieving any pre-authentication state)
                      onRedirectCallback(appState);
                  }
              } catch (e) {
                  this.error = e;
              } finally {
                  // Initialize our internal authentication state
                  this.isAuthenticated = await this.auth0Client.isAuthenticated();
                  this.user = await this.auth0Client.getUser();
                  this.loading = false;
              }
          }
      });
  
      return instance;
  };
  
  // Create a simple Vue plugin to expose the wrapper object throughout the application
  export const Auth0Plugin = {
      install(Vue, options) {
          Vue.prototype.$auth = useAuth0(options);
      }
  };