-
Notifications
You must be signed in to change notification settings - Fork 227
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
passportConfigurator userModel not responding to change #95
Comments
Duplicate. See strongloop/loopback#1750 |
Keeping this issue as the main and closing strongloop/loopback#1750 as a duplicate. |
Following the discussion you had at strongloop/loopback#1750 , I can confirm that there is an issue with user models not named User or user due to hardcoded relations in userIdentity and userCredentials. This falls under supporting extended user models. I have already submitted a PR fixing this here: #93 |
For those -like me- who simply can not wait until this module is merged and released, I took @clockworkgr fix, I did just small tweaks and published under So thanks to @clockworkgr fix, now we can assign a specific user model. its working for me now.. $ npm uninstall --save loopback-component-passport
$ npm install --save loopbac-component-passport-c Following the standard documentation from loopback should work -now it does-, the following method does what everyone would expect it to do. passportConfigurator.setupModels({
userModel: app.models.Account, // Now my users are stored in Account and accessToken is now related with this account.
userIdentityModel: app.models.AccountIdentity,
userCredentialModel: app.models.AccountCredential
}); Please consider that passing an For that reason I encourage anyone willing to fix this issue in your project ASAP by using Cheers |
Concerning #106 which was closed as duplicate. Anyone has any idea (or example) on how to auth (FB or Google) using a non standard model? By that i mean, a model that has extra required fields to the standard ones. For example, my model has a isActive field, and auth fails every time because of validation error, as the isActive does not exist in the FB response. In my case what i get after every auth attempt is this (or something in this lines)
|
I think you simply should use an operation hook, Im doing something similar of what you try to achieve, I add a permalink depending the username facebook/twitter sent Account.observe('before save', function(ctx, next) {
if (!ctx.isNewInstance) { next(); }
// I create a permalink and a relation model on before save hook
});
Account.observe('after save', function(ctx, next) {
if (!ctx.isNewInstance) { next(); }
// I send a welcome email message here
}); The documentation states that it should run before validation https://docs.strongloop.com/display/public/LB/Operation+hooks Cheers, |
@jonathan-casarrubias That brings me closer to what i'm after. Any idea if the ctx object holds the strategy data (FB return data)? I found an "instance" property but it does not hold the FB data. For example, i could use the first and last name returned by FB. I can see in the user-identity.js the profileToUser receives the profile, can i override it somehow ? Edit: I realized that by adding my own login method i override the default. Is this considered to be a good practice? thanks |
I don't think you should override anything, actually you should be able to get the data you are looking by calling for it inside the hook, should be something like.. Account.observe('before save', function(ctx, next) {
if (!ctx.isNewInstance) { next(); }
var identities = ctx.instance.identities();
}); I did not test the snippet but should be good enough to give you the idea. Cheers, |
ctx.instance is an object holding the following
which is consistent with what the profileToUser function returns. With that said, looking into user-identity.js i noticed that you can have your own profileToUser method by passing it in the strategy options. This will do just fine and i think that code wise it is somewhat "cleaner" to having a "before save" hook. thoughts? P.S. I believe that this including loginCallback and customCallback deserve to be mentioned in the docs cause they give you a great deal of options as far as customization goes. |
The way I configured, I extended, User, UserIdentities and UserCredentials into Account, AccountIdentities and AccountCredentials, I explicitly added the relation as stated in the documentation, and I do have access to Account.identities() or ctx.instance.identitites() that includes the identities for that account so you may manipulate that data as your convenience. In order for this to work, I needed to use the module I published that includes @clockworkgr's fix, which is the original topic of this thread, otherwise won't work, see above for more details. Cheers, |
@loay Reassigning to you as you are the triage expert. |
Thanks. Having a look. |
@jonathan-casarrubias
could you specify what relation exactly you added? thanks, |
Hey guys any progress on this? I need to extend the user model in one of my projects and I wanted to use loopback 3.x. Sadly the fix up above is only slated for 2.x (the temporary fork is what I am talking about). Is there any timetable for when this will be fixed? |
I'm starting a project with loopback 3 and will need to use the component passport, I'll see how it goes and update here |
@jonathan-casarrubias Any luck? |
@btassone we did start the project in LoopBack 3 and were able to use the fork version I published without problems. Anyway, I had to take the decision of rolling back to version 2, not because of issues with this module, but because the version 3 alpha present many issues that the version 2 does not present, many of these were issues with HasMany relationships. So, again we were able to use it in version 3, but we rolled back because other issues. Hope this info is helpful for you |
1 year after and we're still here :p |
any update on this one? or is there a work around to allow a custom User model? |
@wprater, use the "loopback-component-passport-c" package someone mentioned here before. This allows you to use custom User models! |
My custom User model (named PortalUser) is now being auto-created by
|
lol almost 3 years and same problems? that is why I decided to stop using loopback.. good luck guys |
@jonathan-casarrubias what are you using instead of it? It seems the error was caused by a lack of documentation. @lowell-list solution works fine with source package. |
@lowell-list have to change it to
|
@rajkaran - you are correct; I reviewed my code and discovered that I later changed |
@lowell-list:
Another solution is removing the built-in User model setting in model-config.json.
|
Hi there!
I am using the facebook passport component, to handle user signup via facebook.
It is fully functional, however:
despite my server.js containing:
the users are still created in the standard User table, instead of my Donor table.
The text was updated successfully, but these errors were encountered: