我有一个使用CredentialsAuthProvider()运行一段时间的应用程序。
今天,我想添加Twitter和Facebook作为人们创建帐户的选项。我有脚手架到位了。
//Register all Authentication methods you want to enable for this web app.
Plugins.Add(new AuthFeature(() => new AuthUserSession(),
new IAuthProvider[] {
new CredentialsAuthProvider(),
new TwitterAuthProvider(appSettings),
new FacebookAuthProvider(appSettings)
}));
//Provide service for new users to register so they can login with supplied credentials.
Plugins.Add(new CustomRegistrationFeature());
端点/ api / auth / twitter和/ api / auth / facebook工作,我看到OAuth进程完成后访问/ api / auth创建了一个用户会话但是......
我的UserAuthRepository(OrmLiteAuthRepository)中没有创建用户。存储在会话中的用户ID无效。使用[Authenticate]属性修饰的任何方法都会返回404(User not found)错误。
我希望用Facebook或Twitter获得的第一个/最后一个/电子邮件创建用户。我误解了什么吗?
ServiceStack v4.0.38
答案 0 :(得分:1)
要检查的一些事项是oauth.CallbackUrl
已正确设置,并考虑到您注册的多个提供商。例如http://localhost/auth/{0}
。
此外,您应该检查您的IDbConnectionFactory
使用的OrmLiteAuthRepository
是否也已在IoC容器中注册。例如
var dbFactory = new OrmLiteConnectionFactory(
"~/App_Data/db.sqlite".MapHostAbsolutePath(),
SqliteDialect.Provider);
container.Register<IDbConnectionFactory>(dbFactory);
var authRepo = new OrmLiteAuthRepository(dbFactory);
container.Register<IUserAuthRepository>(authRepo);
authRepo.InitSchema();
答案 1 :(得分:0)
我想更新此帖子以表示我已升级到ServiceStack 4.0.42并且此问题已自行解决。