Merge branch 'feature/fix-registration' into 'master'

Feature/fix registration

See merge request framasoft/mobilizon!37
This commit is contained in:
Thomas Citharel 2018-12-28 16:42:53 +01:00
commit b5ac788227
6 changed files with 54 additions and 64 deletions

View file

@ -92,10 +92,7 @@
}; };
rules = { rules = {
required: value => !!value || 'Required.', required: value => !!value || 'Required.',
email: (value) => { email: (value) => value.includes('@') || 'Invalid e-mail.',
const pattern = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
return pattern.test(value) || 'Invalid e-mail.';
},
}; };
user: any; user: any;
@ -110,24 +107,25 @@
this.credentials.password = this.password; this.credentials.password = this.password;
} }
loginAction(e: Event) { async loginAction(e: Event) {
e.preventDefault(); e.preventDefault();
this.$apollo.mutate({ try {
mutation: LOGIN, const result = await this.$apollo.mutate({
variables: { mutation: LOGIN,
email: this.credentials.email, variables: {
password: this.credentials.password, email: this.credentials.email,
}, password: this.credentials.password,
}).then((result) => { },
console.log(result) });
this.saveUserData(result.data); this.saveUserData(result.data);
this.$router.push({ name: 'Home' }); this.$router.push({ name: 'Home' });
}).catch((e) => { } catch (err) {
console.log(e); console.error(err);
this.error.show = true; this.error.show = true;
this.error.text = e.message; this.error.text = err.message;
}); }
} }
validEmail() { validEmail() {
@ -136,7 +134,6 @@
saveUserData({ login: login }) { saveUserData({ login: login }) {
localStorage.setItem(AUTH_USER_ID, login.user.id); localStorage.setItem(AUTH_USER_ID, login.user.id);
localStorage.setItem(AUTH_USER_ACTOR, JSON.stringify(login.actor));
localStorage.setItem(AUTH_TOKEN, login.token); localStorage.setItem(AUTH_TOKEN, login.token);
} }
} }

View file

@ -121,12 +121,9 @@
}, },
}; };
rules = { rules = {
password_length: value => value.length > 6 || 'Password must be at least 6 caracters long', password_length: value => value.length > 6 || 'Password must be at least 6 characters long',
required: value => !!value || 'Required.', required: value => !!value || 'Required.',
email: (value) => { email: (value: string) => value.includes('@') || 'Invalid e-mail.',
const pattern = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
return pattern.test(value) || 'Invalid e-mail.';
},
}; };
resetState() { resetState() {
@ -154,20 +151,21 @@
return this.rules.email(this.email) === true ? 'v-gravatar' : 'avatar'; return this.rules.email(this.email) === true ? 'v-gravatar' : 'avatar';
} }
submit() { async submit() {
this.$apollo.mutate({ try {
mutation: CREATE_USER, await this.$apollo.mutate({
variables: { mutation: CREATE_USER,
email: this.email, variables: {
password: this.password, email: this.email,
username: this.username, password: this.password,
}, username: this.username,
}).then((data) => { },
console.log(data); });
this.validationSent = true; this.validationSent = true;
}).catch((error) => { } catch (error) {
console.error(error); console.error(error);
}); }
} }
}; };
</script> </script>

View file

@ -19,7 +19,7 @@
<script lang="ts"> <script lang="ts">
import { VALIDATE_USER } from '@/graphql/user'; import { VALIDATE_USER } from '@/graphql/user';
import { Component, Prop, Vue } from 'vue-property-decorator'; import { Component, Prop, Vue } from 'vue-property-decorator';
import { AUTH_TOKEN, AUTH_USER_ACTOR, AUTH_USER_ID } from '@/constants'; import { AUTH_TOKEN, AUTH_USER_ID } from '@/constants';
@Component @Component
export default class Validate extends Vue { export default class Validate extends Vue {
@ -32,27 +32,27 @@
this.validateAction(); this.validateAction();
} }
validateAction() { async validateAction() {
this.$apollo.mutate({ try {
mutation: VALIDATE_USER, const data = await this.$apollo.mutate({
variables: { mutation: VALIDATE_USER,
token: this.token, variables: {
}, token: this.token,
}).then((data) => { },
this.loading = false; });
console.log(data);
this.saveUserData(data.data); this.saveUserData(data.data);
this.$router.push({ name: 'Home' }); this.$router.push({ name: 'Home' });
}).catch((error) => { } catch (err) {
this.loading = false; console.error(err);
console.log(error);
this.failed = true; this.failed = true;
}); } finally {
this.loading = false;
}
} }
saveUserData({ validateUser: login }) { saveUserData({ validateUser: login }) {
localStorage.setItem(AUTH_USER_ID, login.user.id); localStorage.setItem(AUTH_USER_ID, login.user.id);
localStorage.setItem(AUTH_USER_ACTOR, JSON.stringify(login.actor));
localStorage.setItem(AUTH_TOKEN, login.token); localStorage.setItem(AUTH_TOKEN, login.token);
} }

View file

@ -6,10 +6,6 @@ mutation Login($email: String!, $password: String!) {
token, token,
user { user {
id, id,
},
actor {
avatarUrl,
preferredUsername,
} }
}, },
} }

View file

@ -3,11 +3,8 @@ import gql from 'graphql-tag';
export const CREATE_USER = gql` export const CREATE_USER = gql`
mutation CreateUser($email: String!, $username: String!, $password: String!) { mutation CreateUser($email: String!, $username: String!, $password: String!) {
createUser(email: $email, username: $username, password: $password) { createUser(email: $email, username: $username, password: $password) {
preferredUsername, email,
user { confirmationSentAt
email,
confirmationSentAt
}
} }
} }
`; `;
@ -18,10 +15,6 @@ mutation ValidateUser($token: String!) {
token, token,
user { user {
id, id,
},
actor {
avatarUrl,
preferredUsername,
} }
} }
} }

View file

@ -61,7 +61,13 @@ defmodule Mobilizon.Actors do
""" """
@spec get_actor_for_user(Mobilizon.Actors.User.t()) :: Mobilizon.Actors.Actor.t() @spec get_actor_for_user(Mobilizon.Actors.User.t()) :: Mobilizon.Actors.Actor.t()
def get_actor_for_user(%Mobilizon.Actors.User{} = user) do def get_actor_for_user(%Mobilizon.Actors.User{} = user) do
case Repo.one(from(a in Actor, join: u in User, on: u.default_actor_id == a.id)) do case Repo.one(
from(a in Actor,
join: u in User,
on: u.default_actor_id == a.id,
where: u.id == ^user.id
)
) do
nil -> get_actors_for_user(user) |> hd nil -> get_actors_for_user(user) |> hd
actor -> actor actor -> actor
end end