2015-04-02 54 views
1

我目前正在嘗試實現ServiceStack的身份驗證插件,但在註銷用戶後遇到問題。我從此線程看過:無法在ServiceStack中使用基本身份驗證註銷用戶

How to logout authenticated user in ServiceStack?

您應該可以提出請求auth/logout。不過,我仍然登錄在這一點上。我也嘗試以無效用戶登錄/auth?username=&password=,但無濟於事。

奇怪的是這些方法在非常罕見的情況下從我這裏工作過,但我沒有找到原因。任何幫助,將不勝感激。

UPDATE:

我只是嘗試了在提琴手上述要求,並注意到我取回一個401,我想應該試圖登錄爲無效的用戶時,可以預期,但爲什麼它的註銷請求的情況?

+0

提供商使用招,什麼是想退出時,你得到的錯誤訊息?它是「400不是空的」嗎? – Rachid 2015-04-02 14:49:48

+0

@Rachid它的401 - 未經授權 – 2015-04-07 08:12:15

回答

2

看起來這是在註銷時觸發的用戶名/密碼驗證的相同情況。如果你還沒有這樣做,你可以通過推出自己的CustomAuthProvider來克服這個問題。在驗證部分,您應該將註銷作爲提供者排除。

public class CustomAuthProvider : CredentialsAuthProvider 
{ 
    private class CredentialsAuthValidator : AbstractValidator<Authenticate> 
    { 
     public CredentialsAuthValidator() 
     { 
      RuleFor(x => x.UserName) 
        .NotEmpty().WithMessage("Username Required") 
        .When(d => d.provider != "logout"); 

      RuleFor(x => x.Password) 
        .NotEmpty().WithMessage("Password Required") 
        .When(d => d.provider != "logout"); 
     } 
    } 

    public override object Authenticate(IServiceBase authService, IAuthSession session, Authenticate request) 
    { 
     new CredentialsAuthValidator().ValidateAndThrow(request); 
     return Authenticate(authService, session, request.UserName, request.Password, request.Continue); 
    } 
} 

您還需要註冊CustomAuthProvider

Plugins.Add(new AuthFeature(() => new CustomUserSession(), 
    new IAuthProvider[] { 
     new CustomAuthProvider() 
    }) { HtmlRedirect = null }); 

注意:你缺少在/auth/{provider}?username=&password=

+0

是的,這對我來說非常合適,謝謝。爲了澄清其他人,我可以使用「auth/logout」註銷,並且可以使用「auth?username = {username}&password = {password}」登錄(注意:我不需要先註銷以其他用戶身份登錄)。但我仍然感到困惑,爲什麼我在使用BasicAuthProvider時遇到了這個問題。我的印象很簡單,就是註銷。一個錯誤可能? – 2015-04-07 08:35:45

相關問題