2012-09-17 41 views
1

我想使用ServiceStack.net,所以我的第一个服务已经实现了一个CustomAccountAuthProvider,它的TryAuthenticate方法现在简单地返回True。ServiceStack.net与自定义CredentialsAuthProvider返回“未经授权”?

我遇到的问题是,客户端首先调用(和成功)

var rc = new JsonServiceClient("http://localhost:1337/"); 

var ar = rc.Send<AuthResponse>(new Auth 
{ 
    provider = CredentialsAuthProvider.Name, 
    UserName = "user", 
    Password = "[email protected]", 
    RememberMe = true 
}); 

其次:

var newJob = rc.Post<BladeJob>("/jobs", new BladeJob { Name = "TestJob" }); //todo.Id = 

仅返回 “未授权”(异常)。

的服务很简单:

[Authenticate()] 
public class BladesService : RestServiceBase<BladeJob> 
{ 
    public JobRepository Repository { get; set; } 

    public override object OnPut(BladeJob request) 
    { 
    return Repository.Store(request); 
    } 

public override object OnPost(BladeJob job) 
{ 
    return Repository.Store(job); 
} 

    public override object OnGet(BladeJob request) 
    { 
    IAuthSession session = this.GetSession(); 

    if (request.JobID != default(ulong)) 
     return Repository.GetByID(request.JobID); 

    return Repository.GetAll(); 
    } 
} 

我把一个断点在TryAuthenticate和它击中它就好了,我究竟做错了什么?

整个主机配置是在这里:

public override void Configure(Funq.Container container) 
{ 
    //Register Web Service dependencies 
    container.Register(new JobRepository()); 
    //Register all Authentication methods you want to enable for this web app. 
    Plugins.Add(new AuthFeature(() => new AuthUserSession(), 
     new AuthProvider[] { 
     new CustomCredentialsAuthProvider() //HTML Form post of UserName/Password credentials 
     } 
)); 

    //Register user-defined REST-ful routes   
    Routes 
    .Add<BladeJob>("/jobs") 
    .Add<BladeJob>("/jobs/{JobID}"); 

回答

2

你应该注册一个ICacheClientSession Provider应该使用。

E.g.你可以注册一个内存缓存:

container.Register<ICacheClient>(new MemoryCacheClient()); 

这里有其他可供ServiceStackCaching providers

注:由于这是抓了几个人意外,所以在ServiceStack(v3.9.12 +)的下一个版本,我们将自动注册,如果没有指定一个是使用内存缓存。