私は ServiceStack を理解するために数日を費やしましたが、素晴らしいと思います。唯一の問題は、多くの摩擦、ハードワーク、涙のように見える認証にあります.
MonoTouch でユーザーを登録し、ServiceStack に対して認証/OAuth に対して認証し、一般的に認証時のデータベースへの呼び出しを最小限に抑えたいと考えています。
これまでのところ、私はこれを持っています:
var client = new JsonServiceClient(newbaseUri);
// register a new user:
var registration = new Registration {
FirstName = "john"
UserName = "user" ,
Password = "pass",
Email = "john@john.com",
};
var registerResponse = client.Send<RegistrationResponse>(registration);
--------------------------------
// user registered...later on I authenticate:
var authResponse = client.Send<AuthResponse>(new Auth {
UserName = "user",
Password = "pass",
RememberMe = true
});
var authResponse = clientlogin.Send<AuthResponse>(auth);
--------------------------------
// somehow I need to store 'authresponse' for later calls, not sure how without a browser
// tried manually setting the cookies and credentials parameters later but no joy
// but now I need to call a secured ([Authenticate] decorated) service method:
var client = new JsonServiceClient(newbaseUri);
var response = client.Send<HelloResponse>(new Hello { Name = "World!" });
return response.Result;
-----------------------------------------
// heres the configuration
var appSettings = new AppSettings();
//Default route: /auth/{provider}
Plugins.Add(new AuthFeature(() => new CustomUserSession(),
new IAuthProvider[] {
new CredentialsAuthProvider(appSettings), // never seems to get called
//new FacebookAuthProvider(appSettings), // not sure how to get this to work on monotouch
//new TwitterAuthProvider(appSettings), // same issue as facebook
new BasicAuthProvider(appSettings) // works but what about caching/tokens/cookies?
}));
//Default route: /register
Plugins.Add(new RegistrationFeature()); // how do i send extra params to this as created in mongodb collection
var mongoClient = new MongoClient("mongodb://localhost");
var server = mongoClient.GetServer();
var db = server.GetDatabase("users");
container.Register<ICacheClient>(new MemoryCacheClient());
container.Register<IUserAuthRepository>(new MongoDBAuthRepository(db, true));
私の質問は:
1) ServiceStack.Common に存在しない追加のフィールドを登録と共に渡せるようにするにはどうすればよいですか (mongodb [Servicestack.Authentication.Mongodb] には、生年月日、最初の行、都市、タイムゾーンなどの多くの空のフィールドがあるため)。 .ServiceClient.Web.Registration オブジェクト?
2) 'authresponse' で送信された Cookie (またはトークン システム) を後続の呼び出しに転送して、ServiceStack が進行中の認証のセッションと照合できるようにするにはどうすればよいですか? 「基本認証」メソッドを使用しますか (つまり、CredentialsAuthProvider はサーバー側で呼び出されません)?
助けてください...私はドキュメントを読み、テストを実行し、ソーシャルブートストラップを調べましたが、今ではこれで何日も無駄に過ごしており、SSをsimplemembershipに統合するか、古い学校のsoap/wcfのためにServiceStackを完全に捨てることさえ考えています。見た目で実装する:(