ServiceStack.net与Custom CredentialsAuthProvider返回“未授权”?

时间:2012-09-17 19:27:17

标签: rest servicestack

我正在尝试使用ServiceStack.net,因此我的第一个服务实现了一个Custom CredentialsAuthProvider,其TryAuthenticate方法此时只返回True。

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

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

var ar = rc.Send<AuthResponse>(new Auth
{
  provider = CredentialsAuthProvider.Name,
  UserName = "user",
  Password = "p@55word",
  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}");

1 个答案:

答案 0 :(得分:2)

您应该注册Session Provider应该使用的ICacheClient

E.g。您可以使用以下命令注册内存缓存:

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

以下是Caching providers可用的其他ServiceStack

注意:由于意外地抓住了一些人,所以在下一版ServiceStack(v3.9.12 +)中,如果没有指定,我们将自动注册使用InMemory Cache。