#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. Поскольку он наследует встроенную пользовательскую модель, вам необходимо открыть свои списки управления доступом для всех для этого нового удаленного метода. Я соответствующим образом обновил свой ответ.