Как получить токен (при входе в систему) в приложении Nuxt, используя мой собственный API API? - PullRequest
0 голосов
/ 07 февраля 2020

Я работаю над проектом с другим человеком. Я делаю серверную часть, а он - интерфейсную.

Наши пользователи могут зарегистрироваться и войти в систему, но мы не можем получить токен, который я сгенерировал в своем 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;
        }
    });
}

1 Ответ

0 голосов
/ 08 февраля 2020

Я лично использую аутентификацию Nuxt для входа и регистрации пользователей. Это удобно, потому что основная конфигурация установлена ​​в nuxt.config. js. Используя ax ios, у нас есть специальные функции, встроенные в Nuxt Auth. Возможно, я не помог централизованно решить эту проблему, но, возможно, я указал на дополнительный выход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...