2015-04-01 116 views
0

我有一个应用程序已运行使用CredentialsAuthProvider()一段时间。ServiceStack Twitter身份验证和注册

今天,我想添加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 /认证/ Twitter和/ API/auth /中Facebook的工作,我看到一个用户会话访问/ API/AUTH创建一次OAuth的过程完成后无论其...

我的UserAuthRepository(OrmLiteAuthRepository)中没有创建用户。存储在会话中的用户标识无效。任何使用[Authenticate]属性装饰的方法都会导致返回404(用户未找到)错误。

我期望用户通过从Facebook或Twitter获得的First/Last/Email创建用户。我误解了什么吗?

ServiceStack v4.0.38

+0

如果仍有问题,请尝试创建一个最小项目来突出显示问题并在此处发布链接。 – 2015-04-10 02:48:44

+0

好吧,我会那样做。我在旅行时本周无法获得任何设置,但会尽快获得帮助。 问题的症结在于Session正在由Twitter提供程序创建,但数据库没有将用户添加到该提供程序中。 现在它只是在我的redis会话存储中创建一个ID为== 1的用户,但在我的auth仓库中创建了no用户(它应该是ID为4xxx的用户)。 – 2015-04-12 23:30:51

回答

0

我想更新此线程以说我已升级到ServiceStack 4.0.42,并且此问题已经自行解决。

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(); 
+0

是的,我有这样的设置。 'container.Register (new OrmLiteConnectionFactory(ConfigUtils.GetConnectionString(“DB”),SqlServerOrmLiteDialectProvider.Instance)); //将用户数据存储到引用的SqlServer数据库中 //使用OrmLite数据库连接来保存UserAuth和AuthProvider信息container.Register (c => new OrmLiteAuthRepository(c.Resolve ())) ;' – 2015-04-12 23:51:28

+0

尝试使用Github Gists来获取较大的代码片段,在评论中很难阅读。你是否初始化了认证库? 'authRepo.InitSchema();'?如果您查询用户表,它是否存在或有没有行?例如,'dbConnection.Exists '或'dbConnection.Select ' – 2015-04-13 23:19:56

+0

@ user2069563如果您仍然遇到问题,请尝试查看一些示例和ServiceStack的实时演示,其中使用了不同的OAuth提供程序,如TechStacks,HttpBenchmarks,他们可以在这里的ServiceStackApps GitHub组织下找到。 https://github.com/ServiceStackApps/ – 2015-04-17 11:44:59