io3fix
Version:
toolkit for interior apps
59 lines (56 loc) • 1.89 kB
JavaScript
import Promise from 'bluebird'
import log from 'js-logger'
import callServices from '../services/call.js'
import uuid from '../uuid.js'
import getSession from './get-session.js'
import runtime from '../../core/runtime.js'
/**
* Login in user using credentials
* @function io3d.auth.logIn
* @param {object} args
* @param {string} args.username - User username or email
* @param {string} args.password - User password
*/
export default function logIn(args) {
var credentials = {
username: args.username || args.email,
password: args.password || uuid.generate()
}
// log out first
log.debug(
'Sending API login request for user "' + credentials.username + '" ...'
)
return callServices('User.logOut')
.then(function onLogoutSuccess() {
// send log in request
return callServices('User.logIn', {
loginData: {
resourceName: credentials.username,
password: credentials.password
}
})
})
.then(function onLoginSuccess() {
// request session to verify login with a separate request
return getSession()
})
.then(function onSessionSuccess(session) {
if (session.isAuthenticated) {
log.debug(
'API: User "' + session.user.email + '" logged in successfully.'
)
return session
} else {
if(runtime.isNode) return Promise.reject('io3d.auth.logIn cannot be used in node.js. Please use secret key authentication instead. See https://3d.io/docs/api/1/get-started-node-server.html#using-secret-api-key for further info.')
else return Promise.reject('Log in error: Session could not been established.')
}
})
.catch(function onError(error) {
// login failed
log.debug(
'API: Could not log in user "' + credentials.username + '".',
error
)
return Promise.reject(error)
})
}