Я работаю над проектом с другим человеком. Я делаю серверную часть, а он - интерфейсную.
Наши пользователи могут зарегистрироваться и войти в систему, но мы не можем получить токен, который я сгенерировал в своем API обратно.
Я пытался найти некоторые источники, чтобы сделать это, но, похоже, ничто не подходит для нашей ситуации
Как мы можем это сделать?
Спасибо :))
Фронт:
<form @submit.prevent="login" method="post">
<div class="group_field">
<input id="email" v-model="email" type="email" name="email" required>
<label for="email">Email</label>
</div>
<div class="group_field">
<input id="password" v-model="pswd" type="password" name="password" required>
<label for="password">Password</label>
</div>
<button type="submit">
Login
</button>
<small>Pas de compte ? <nuxt-link to="/register">S'inscrire</nuxt-link></small>
</form>
<script>
export default {
data () {
return {
email: '',
pswd: '',
token: '',
error: null
}
},
methods: {
async login () {
try {
await this.$axios.post('http://localhost:3080/login', {
email: this.email,
pswd: this.pswd,
token: this.token
})
this.$router.push('/')
} catch (e) {
this.error = e.response.data.message
}
}
}
}
</script>
Назад:
index. js:
router.route('/login')
.post(logger, userController.logUser);
пользователей. js:
export const logUser = async (req, res) => {
if (!req.body.email || !req.body.pswd) return throwBadRequest('Missing parameters', res);
if (!await utils.validateEmail(req.body.email)) return throwBadRequest('Wrong email format', res);
if (!await utils.validatePassword(req.body.pswd)) return throwBadRequest('Wrong password formatmust be: at least 3 char long with 1 uppercase 1 lowercase and 1 number', res);
await UserModel.fetchUser(req.body.email, req.body.pswd, (err, result) => {
if (err) return throwIntServerError(err, res);
req.token = { token: result };
return sendOKWithData({ auth: true, token: result }, res);
});
}
userModel. js:
UserSchema.statics.fetchUser = async function (userEmail, userPswd, cb) {
await this.findOne({ userEmail }, async (err, user) => {
if (err) return cb(err);
if(!user) return cb(new Error('user Not Found'));
const isValid = await bcrypt.compare(userPswd, user.userPswd);
if(isValid === true) {
let token = jwt.sign({ userEmail: userEmail, userPswd: userPswd }, secret, {expiresIn: 86400});
return cb(null, token);
} else {
return null;
}
});
}