получение токена доступа после регистрации в loopback

#node.js #loopbackjs #reactjs-native

#node.js #loopbackjs #reactjs-native

Вопрос:

Возможно ли получить токен доступа сразу после регистрации пользователя в loopback без необходимости входа пользователя в систему? Если да, то как вы это делаете? Я использую loopback 3

Ответ №1:

Я бы добавил после удаленного подключения к users/create удаленному методу, чтобы после его успешного вызова вы могли вызвать User.login() (чтобы получить токен доступа) с паролем, который вы, вероятно, можете получить от request объекта. Таким образом, после запроса на регистрацию вы получите токен доступа в ответе.

Ответ №2:

Вот мой текущий фрагмент. Вам нужно добавить пользовательский удаленный метод в ваш common/models/account.js файл (или любое другое имя, которое вы выберете), где ваша Account модель наследует встроенную User модель:

 module.exports = function (Account) {

        Account.createAndLogin = function (data, cb) {
            if (!data || !data.password) {
                return cb(new Error("Attribute 'password' is mandatory to create a new user."));
            }
            Account.create(data, function (err, account) {
                if (err) {
                    return cb(err, null);
                }
                Account.login({email: data.email, password: data.password}, function (err, token) {
                    if (err) {
                        return cb(err, null);
                    }
                    cb(err, {
                        id: token.id,
                        ttl: token.ttl,
                        created: token.created,
                        userId: token.userId,
                        account: account
                    });
                });
            });
        };

        Account.remoteMethod('createAndLogin', {
            description: "Create and login in one remote method",
            accepts: {arg: 'data', type: 'object', required: true, http: {source: 'body'}, description: 'Model instance data'},
            returns: {arg: 'accessToken', type: 'object', root: true, description: 'User Model'},
            http: {verb: 'post'}
        });
};
  

Редактировать: Поскольку Account модель наследует встроенную User модель, вам необходимо открыть списки управления доступом (ACL) для $ everyone.

Итак, ваш common/models/account.json файл должен выглядеть следующим образом:

 {
  "name": "Account",
  "base": "User",
  "idInjection": true,
  "properties": {},
  "validations": [],
  "relations": {},
  "acls": [
    {
      "principalType": "ROLE",
      "principalId": "$everyone",
      "permission": "ALLOW",
      "property": "createAndLogin"
    }
  ],
  "methods": []
}
  

Комментарии:

1. когда я использую ваш метод и пытаюсь создать пользователя (в моем случае student) Я получаю сообщение об ошибке «Требуется авторизация»… Как вы установили accessToken?

2. Поскольку он наследует встроенную пользовательскую модель, вам необходимо открыть свои списки управления доступом для всех для этого нового удаленного метода. Я соответствующим образом обновил свой ответ.