Automatically login after registration

Closes #186

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
Thomas Citharel
2019-10-07 13:47:46 +02:00
parent 2fc24023cc
commit c58c9e5f97
9 changed files with 54 additions and 25 deletions

View File

@@ -36,7 +36,7 @@
</div>
</div>
<div class="column">
<form @submit="submit">
<form v-on:submit.prevent="submit()">
<b-field
:label="$t('Email')"
:type="errors.email ? 'is-danger' : null"
@@ -69,7 +69,7 @@
<b-field grouped>
<div class="control">
<button type="button" class="button is-primary" @click="submit()">
<button class="button is-primary">
{{ $t('Register') }}
</button>
</div>

View File

@@ -17,11 +17,13 @@
</template>
<script lang="ts">
import { VALIDATE_USER } from '@/graphql/user';
import { VALIDATE_USER, UPDATE_CURRENT_USER_CLIENT } from '@/graphql/user';
import { Component, Prop, Vue } from 'vue-property-decorator';
import { AUTH_USER_ID } from '@/constants';
import { RouteName } from '@/router';
import { saveTokenData } from '@/utils/auth';
import { saveUserData, changeIdentity } from '@/utils/auth';
import { ILogin } from '@/types/login.model';
import { ICurrentUserRole } from '@/types/current-user.model';
@Component
export default class Validate extends Vue {
@@ -36,24 +38,37 @@ export default class Validate extends Vue {
async validateAction() {
try {
const { data } = await this.$apollo.mutate({
const { data } = await this.$apollo.mutate<{ validateUser: ILogin }>({
mutation: VALIDATE_USER,
variables: {
token: this.token,
},
});
this.saveUserData(data);
if (data) {
saveUserData(data.validateUser);
const user = data.validateUser.user;
console.log(user);
if (user.defaultActor) {
await this.$router.push({ name: RouteName.HOME });
} else { // If the user didn't register any profile yet, let's create one for them
await this.$router.push({
name: RouteName.REGISTER_PROFILE,
params: { email: user.email, userAlreadyActivated: 'true' },
const user = data.validateUser.user;
await this.$apollo.mutate({
mutation: UPDATE_CURRENT_USER_CLIENT,
variables: {
id: user.id,
email: user.email,
isLoggedIn: true,
role: ICurrentUserRole.USER,
},
});
if (user.defaultActor) {
await changeIdentity(this.$apollo.provider.defaultClient, user.defaultActor);
await this.$router.push({ name: RouteName.HOME });
} else { // If the user didn't register any profile yet, let's create one for them
await this.$router.push({
name: RouteName.REGISTER_PROFILE,
params: { email: user.email, userAlreadyActivated: 'true' },
});
}
}
} catch (err) {
console.error(err);
@@ -62,11 +77,5 @@ export default class Validate extends Vue {
this.loading = false;
}
}
saveUserData({ validateUser: login }) {
localStorage.setItem(AUTH_USER_ID, login.user.id);
saveTokenData(login);
}
}
</script>