Add new afterLogin cloud code hook (#6387)
* add new afterLogin cloud code hook * include user on req.user for afterLogin hook
This commit is contained in:
@@ -264,6 +264,18 @@ export class UsersRouter extends ClassesRouter {
|
||||
user.sessionToken = sessionData.sessionToken;
|
||||
|
||||
await createSession();
|
||||
|
||||
const afterLoginUser = Parse.User.fromJSON(
|
||||
Object.assign({ className: '_User' }, user)
|
||||
);
|
||||
maybeRunTrigger(
|
||||
TriggerTypes.afterLogin,
|
||||
{ ...req.auth, user: afterLoginUser },
|
||||
afterLoginUser,
|
||||
null,
|
||||
req.config
|
||||
);
|
||||
|
||||
return { response: user };
|
||||
}
|
||||
|
||||
|
||||
@@ -165,6 +165,42 @@ ParseCloud.beforeLogin = function(handler) {
|
||||
);
|
||||
};
|
||||
|
||||
/**
|
||||
*
|
||||
* Registers the after login function.
|
||||
*
|
||||
* **Available in Cloud Code only.**
|
||||
*
|
||||
* This function is triggered after a user logs in successfully,
|
||||
* and after a _Session object has been created.
|
||||
*
|
||||
* ```
|
||||
* Parse.Cloud.afterLogin((request) => {
|
||||
* // code here
|
||||
* })
|
||||
*
|
||||
* ```
|
||||
*
|
||||
* @method afterLogin
|
||||
* @name Parse.Cloud.afterLogin
|
||||
* @param {Function} func The function to run after a login. This function can be async and should take one parameter a {@link Parse.Cloud.TriggerRequest};
|
||||
*/
|
||||
ParseCloud.afterLogin = function(handler) {
|
||||
let className = '_User';
|
||||
if (typeof handler === 'string' || isParseObjectConstructor(handler)) {
|
||||
// validation will occur downstream, this is to maintain internal
|
||||
// code consistency with the other hook types.
|
||||
className = getClassName(handler);
|
||||
handler = arguments[1];
|
||||
}
|
||||
triggers.addTrigger(
|
||||
triggers.Types.afterLogin,
|
||||
className,
|
||||
handler,
|
||||
Parse.applicationId
|
||||
);
|
||||
};
|
||||
|
||||
/**
|
||||
*
|
||||
* Registers the after logout function.
|
||||
|
||||
@@ -4,6 +4,7 @@ import { logger } from './logger';
|
||||
|
||||
export const Types = {
|
||||
beforeLogin: 'beforeLogin',
|
||||
afterLogin: 'afterLogin',
|
||||
afterLogout: 'afterLogout',
|
||||
beforeSave: 'beforeSave',
|
||||
afterSave: 'afterSave',
|
||||
@@ -39,10 +40,13 @@ function validateClassNameForTriggers(className, type) {
|
||||
// TODO: Allow proper documented way of using nested increment ops
|
||||
throw 'Only afterSave is allowed on _PushStatus';
|
||||
}
|
||||
if (type === Types.beforeLogin && className !== '_User') {
|
||||
if (
|
||||
(type === Types.beforeLogin || type === Types.afterLogin) &&
|
||||
className !== '_User'
|
||||
) {
|
||||
// TODO: check if upstream code will handle `Error` instance rather
|
||||
// than this anti-pattern of throwing strings
|
||||
throw 'Only the _User class is allowed for the beforeLogin trigger';
|
||||
throw 'Only the _User class is allowed for the beforeLogin and afterLogin triggers';
|
||||
}
|
||||
if (type === Types.afterLogout && className !== '_Session') {
|
||||
// TODO: check if upstream code will handle `Error` instance rather
|
||||
@@ -615,7 +619,8 @@ export function maybeRunTrigger(
|
||||
const promise = trigger(request);
|
||||
if (
|
||||
triggerType === Types.afterSave ||
|
||||
triggerType === Types.afterDelete
|
||||
triggerType === Types.afterDelete ||
|
||||
triggerType === Types.afterLogin
|
||||
) {
|
||||
logTriggerAfterHook(
|
||||
triggerType,
|
||||
|
||||
Reference in New Issue
Block a user