2015-04-01 110 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