shubhendu
shubhendu

Reputation: 223

can i change user model credentials in loopback?

I am building an API for login and registration using loopback framework. Loopback provides, by default, model User for login, register and other similar stuff. Default way to provide user's credentials in LoopBack is username-password/email-password but I want to use mobileNo-password/email-password as user's login credentials. So how can I do that? How can I change default credential option in User model?

Upvotes: 0

Views: 1298

Answers (1)

xangy
xangy

Reputation: 1205

You can achieve that in two ways:

  1. If not using username field in User model, you can use it to store mobile number, mobileNo.
  2. You have to edit user.js to accept mobileNo field as login credentials. User.login and User.normalizeCredentials are used for login process, so you can edit them like provided in the code snippet.

Note: Don't forget to add mobileNo to user.json

User.normalizeCredentials method

`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 method

`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;
    }
}`

Upvotes: 1

Related Questions