我可以在环回中更改用户模型凭据吗?

时间:2015-11-03 12:18:45

标签: loopbackjs strongloop

我正在使用loopback框架构建用于登录和注册的API。 默认情况下,Loopback为登录,注册和其他类似的东西提供模型User。在LoopBack中提供用户凭据的默认方式是用户名密码/电子邮件密码,但我想使用mobileNo-password / email-password作为用户的登录凭据。那我该怎么办呢?如何更改credential模型中的默认User选项?

1 个答案:

答案 0 :(得分:1)

您可以通过两种方式实现这一目标:

  1. 如果未在username模型中使用User字段,您可以使用它来存储手机号码mobileNo
  2. 您必须编辑user.js以接受mobileNo字段作为登录凭据。 User.loginUser.normalizeCredentials用于登录过程,因此您可以按照代码段中的说明对其进行编辑。
  3. 注意:不要忘记将mobileNo添加到user.json

    User.normalizeCredentials方法

    `User.normalizeCredentials = function(credentials, realmRequired, realmDelimiter) {
        var query = {};
        credentials = credentials || {};
        if (!realmRequired) {
            if (credentials.email) {
                query.email = credentials.email;
            } else if (credentials.mobileNo) {
                query.mobileNo = credentials.mobileNo;
            }
        } else {
            if (credentials.realm) {
                query.realm = credentials.realm;
            }
            var parts;
            if (credentials.email) {
                parts = splitPrincipal(credentials.email, realmDelimiter);
                query.email = parts[1];
                if (parts[0]) {
                    query.realm = parts[0];
                }
            } else if (credentials.mobileNo) {    //added mobileNo.
                parts = splitPrincipal(credentials.mobileNo, realmDelimiter);
                query.mobileNo = parts[1];
                if (parts[0]) {
                    query.realm = parts[0];
                }
            }
        }
        return query;
    };`
    

    User.login方法

    `User.login = function(credentials, include, fn) {
        .
        .
        .
        .
        .
        if (!query.email && !query.mobileNo) {
            var err2 = new Error('Mobile number or email is required');
            err2.statusCode = 400;
            err2.code = 'MOBILE_NUMBER_EMAIL_REQUIRED';
            fn(err2);
            return fn.promise;
        }
    }`