Search code examples
loopbackjsstrongloop

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?


Solution

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