我正試圖與ServiceStack一起構建一個新的移動產品。它正在慢慢地走到一起,但文件雖然很好,但是有些部分簡短,沒有評論&問題的便利。關於ServiceStack身份驗證的澄清/示例
這個問題是關於內置認證。
我一直在從SocialBootstrap工作,這是一個很好的例子,雖然我缺乏骨幹經驗是有點阻礙。我想同時學習它,但沒有時間去做,所以想繼續傳統的觀點。
基於此,有一些樣本或文檔擴展將非常有用。
1.爲什麼AuthUserSession
字符串上的所有屬性? 我看到通過CustomUserSession
類,你可以創建一個CustomId
,但不應該默認屬性映射到數據庫表的AutoIncrement
屬性?不得不解析爲一個整數並不是很理想。我想這只是一次,但仍然顯得很古怪。
var user = session.TranslateTo<User>();
user.Id = int.Parse(session.UserAuthId);
2.檢索會話 我控制器從ControllerBase
它實現ServiceStackController<CustomUserSession>
得出的。要想從控制器會話很容易與base.UserSession
。如果我需要訪問View
中的會話,那麼我只需將會話填入ViewBag
屬性中。
我的服務對象擴展AppServiceBase
,此刻我已經能夠訪問會話的唯一方法是通過注射ClientCache
:
public ICacheClient CacheClient { get; set; }
,然後調用:
var userSession = SessionFeature.GetOrCreateSession<AuthUserSession>(CacheClient);
這並未看起來並不是最優雅的解決方案,所以我希望有一種我不知道的更好的方式。可通往..
3 IClientCache 從閱讀this question這聽起來像我需要實現一個更爲持久的會話緩存。每次重新編譯時都必須進行身份驗證,保存_layout
或任何其他應用重置操作都很煩人。
更持久緩存的推薦解決方案是使用Memcached嗎?不幸的是,在過去,我只使用FormsAuthentication,所以這又是一個新領域。
container.Register<ICacheClient>(new MemcachedClientCache("127.0.0.0[:11211]");
4.手動註冊 這是一個奇怪的一個。我試圖在沒有互聯網連接的情況下編碼,所以我實施了手動註冊,以避免在我的控制器上註釋掉所有[Authenticate]
屬性(視圖也有一些登錄邏輯)。
它的工作,或者我記得它工作,因爲我可以繼續調試。然而現在回到互聯世界卻不是。API端點似乎不存在。如果我瀏覽到/api/register
,那麼我會收到NotImplementedException
。同樣,因爲我沒有使用主幹我有一個JavaScript函數來執行的工作:
var gateway = new servicestack.ClientGateway(location.protocol + "//" + location.host + '/api/');
function intiRegisterUser() {
$('#signup-button').click(function() {
gateway.postFormDataToService({
Register: {
userName: $('#Username').val(),
displayName: $('#Username').val(),
firstName: $('#FirstName').val(),
lastName: $('#LastName').val(),
email: $('#Email').val(),
password: $('#Password').val()
}
},
function(e) {
document.location = "/";
},
function(ex) {
handleError(ex);
});
});
}
這也返回NotImplementedException
。
本文檔頁是偉大的順便說一句,但可以擴展一點,包括這一些。
https://github.com/ServiceStack/ServiceStack/wiki/Sessions
謝謝澄清。我認爲UserId字符串屬性會出於這個原因。也許它在文檔中,我跳過了它。服務會話檢索要好得多,謝謝!將看看Redis,我打算繼續看看它來替換我的數據庫。至於註冊,我忘了提及我已經嘗試過'Registration:'並且它返回相同的NotImplementedException。我還瀏覽了/ api/json/syncreply /註冊 - 這也顯示了一個NotImplementedException。我在v3.9.33.0 – Jordan
NuGet更新了一切。得到它的工作,謝謝! – Jordan