linking accounts now works.
bug, need to change how loopback generates provider string.
This commit is contained in:
59
server/boot/a-extendUserIdent.js
Normal file
59
server/boot/a-extendUserIdent.js
Normal file
@@ -0,0 +1,59 @@
|
||||
import { observeMethod, observeQuery } from '../utils/rx';
|
||||
|
||||
export default function({ models }) {
|
||||
const { User, UserIdentity, UserCredential } = models;
|
||||
const findUserById = observeMethod(User, 'findById');
|
||||
const findIdent = observeMethod(UserIdentity, 'findOne');
|
||||
|
||||
UserIdentity.link = function(
|
||||
userId,
|
||||
provider,
|
||||
authScheme,
|
||||
profile,
|
||||
credentials,
|
||||
options = {},
|
||||
cb
|
||||
) {
|
||||
if (typeof options === 'function' && !cb) {
|
||||
cb = options;
|
||||
options = {};
|
||||
}
|
||||
const user$ = findUserById(userId);
|
||||
console.log('provider', provider);
|
||||
console.log('id', profile.id);
|
||||
findIdent({
|
||||
provider: provider,
|
||||
externalId: profile.id
|
||||
})
|
||||
.flatMap(identity => {
|
||||
const modified = new Date();
|
||||
if (!identity || identity.externalId !== profile.id) {
|
||||
return observeQuery(UserIdentity, 'create', {
|
||||
provider,
|
||||
externalId: profile.id,
|
||||
authScheme,
|
||||
profile,
|
||||
credentials,
|
||||
userId,
|
||||
created: modified,
|
||||
modified
|
||||
});
|
||||
}
|
||||
identity.credentials = credentials;
|
||||
return observeQuery(identity, 'updateAttributes', {
|
||||
profile,
|
||||
credentials,
|
||||
modified
|
||||
});
|
||||
})
|
||||
.withLatestFrom(user$, (identity, user) => ({ identity, user }))
|
||||
.subscribe(
|
||||
({ identity, user }) => {
|
||||
cb(null, user, identity);
|
||||
},
|
||||
cb
|
||||
);
|
||||
};
|
||||
|
||||
UserCredential.link = UserIdentity.link.bind(UserIdentity);
|
||||
}
|
Reference in New Issue
Block a user