我正试图与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