servicestack,C#,servicestack" /> servicestack,C#,servicestack" />

C# 带有Captcha的ServiceStack身份验证

C# 带有Captcha的ServiceStack身份验证,c#,servicestack,C#,servicestack,我想在auth提交表单api/auth/credentials中添加一个CAPTCHA字段 因此,除了用户名、密码和记忆之外,现在表单还需要包含一个验证码字段 然后,我将检查存储验证码图像答案的会话与提交的验证码结果表单 我的问题是,我需要覆盖SS源代码的哪一部分才能正确执行 我的感觉是,我应该首先研究覆盖和定制CredentialAuthProvider类 这里有一个快速的方法: public ExtDeskResponse Post(MyAuth req) { //C

我想在auth提交表单
api/auth/credentials
中添加一个CAPTCHA字段

因此,除了用户名密码记忆之外,现在表单还需要包含一个验证码字段

然后,我将检查存储验证码图像答案的会话与提交的验证码结果表单

我的问题是,我需要覆盖SS源代码的哪一部分才能正确执行


我的感觉是,我应该首先研究覆盖和定制CredentialAuthProvider类

这里有一个快速的方法:

    public ExtDeskResponse Post(MyAuth req) {
        //Captcha Validation
        var valid = req.Captcha == base.Session.Get<Captcha>("Captcha").result;
        //SS Authentication
        var authService = AppHostBase.Instance.TryResolve<AuthService>();
        authService.RequestContext = new HttpRequestContext(
            System.Web.HttpContext.Current.Request.ToRequest(),
            System.Web.HttpContext.Current.Response.ToResponse(),
            null);
        var auth = string.IsNullOrWhiteSpace(
            authService.Authenticate(new Auth {
                UserName = req.UserName,
                Password = req.Password,
                RememberMe = req.RememberMe,   
            }).UserName);
        if (valid && auth) { 
            //...logic
        }
        return new MyAuthResponse() {
            //...data
        }; 
    }
public extdesk响应帖子(MyAuth-req){
//验证码验证
var valid=req.Captcha==base.Session.Get(“Captcha”).result;
//SS认证
var authService=AppHostBase.Instance.TryResolve();
authService.RequestContext=新的HttpRequestContext(
System.Web.HttpContext.Current.Request.ToRequest(),
System.Web.HttpContext.Current.Response.ToResponse(),
无效);
var auth=string.IsNullOrWhiteSpace(
authService.Authenticate(新身份验证){
UserName=req.UserName,
密码=请求密码,
RememberMe=req.RememberMe,
})。用户名);
如果(有效和验证){
//…逻辑
}
返回新的MyAuthResponse(){
//…数据
}; 
}

希望你们能为我展示更优雅、更高效、更可扩展的方法。

这里有一个快速的方法:

    public ExtDeskResponse Post(MyAuth req) {
        //Captcha Validation
        var valid = req.Captcha == base.Session.Get<Captcha>("Captcha").result;
        //SS Authentication
        var authService = AppHostBase.Instance.TryResolve<AuthService>();
        authService.RequestContext = new HttpRequestContext(
            System.Web.HttpContext.Current.Request.ToRequest(),
            System.Web.HttpContext.Current.Response.ToResponse(),
            null);
        var auth = string.IsNullOrWhiteSpace(
            authService.Authenticate(new Auth {
                UserName = req.UserName,
                Password = req.Password,
                RememberMe = req.RememberMe,   
            }).UserName);
        if (valid && auth) { 
            //...logic
        }
        return new MyAuthResponse() {
            //...data
        }; 
    }
public extdesk响应帖子(MyAuth-req){
//验证码验证
var valid=req.Captcha==base.Session.Get(“Captcha”).result;
//SS认证
var authService=AppHostBase.Instance.TryResolve();
authService.RequestContext=新的HttpRequestContext(
System.Web.HttpContext.Current.Request.ToRequest(),
System.Web.HttpContext.Current.Response.ToResponse(),
无效);
var auth=string.IsNullOrWhiteSpace(
authService.Authenticate(新身份验证){
UserName=req.UserName,
密码=请求密码,
RememberMe=req.RememberMe,
})。用户名);
如果(有效和验证){
//…逻辑
}
返回新的MyAuthResponse(){
//…数据
}; 
}
期待着看到你们向我展示更优雅/高效/可扩展的方法