使用Captcha进行ServiceStack身份验证验证

时间:2013-05-07 06:22:58

标签: c# servicestack

我想将一个CAPTCHA字段放入身份验证提交表单api/auth/credentials

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

然后我将检查我在哪里存储验证码图像的答案与表格提交的验证码结果。

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

我的感觉是我应该查看覆盖并自定义CredentialsAuthProvider类?

1 个答案:

答案 0 :(得分:1)

这是一种快速的方法:

    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
        }; 
    }

期待看到你们向我们展示更优雅/高效/可扩展的方式。