分类:
Net Core
使用腾讯防水墙接入滑动验证效果进行登录,防止别人恶意用代码登录。
首先我们要去腾讯防水墙注册,然后创建验证 官方地址:https://007.qq.com

创建好了就可以看见点开基础配置我们自己的id跟密钥了

然后我们就可以接入服务器了
一、先引入js 官方文档地址:https://cloud.tencent.com/document/product/1110/36841
<script src="https://ssl.captcha.qq.com/TCaptcha.js"></script>
二、验证按钮(也就是登录按钮)
<button id="TencentCaptcha" data-appid="appId" data-cbfn="callback" type="button"> 验证 </button>
这里的ID我们不能随便改(按照腾讯固定格式)
三、回调函数进入后台
window.callback = function (res) {
if (res.ret === 1) {//验证失败
alert("未通过验证,请重新验证");
return;
}
if (res.ret === 0) {//验证成功
//这里就是给上面的2个标签赋值
$('#ticket').attr('value', res.ticket);//回调的票据
$('#randstr').attr('value', res.randstr);//回调的字符串
$("#Login").submit();
}做到这一步我们就可以看到效果了

这里注意一下

就是你刚创建好后 点开基础配置这里的id不一样

四、后台
//依赖注入
private readonly INET_UserLogin_DAL inET_UserLogin_DAL;
public HomeController(INET_UserLogin_DAL nET_UserLogin_DAL)
{
inET_UserLogin_DAL = nET_UserLogin_DAL;
}我这里是在CORE里面对数据库操作
string _aid = "2037556340";//appid 这里的id要跟前台的id一致
string _AppSecretKey = "0eJQlnrsMdiz8IDLFKZaZ9A**";//App Secret Key
[HttpPost]
public async Task<Ret> _index(string username, string password, string verifycode, int autologin, string ticket, string randstr)
{
#region 防水墙验证(Get请求)
string url = "https://ssl.captcha.qq.com/ticket/verify?";//请求地址
//参数
string aid = _aid;//appid
string AppSecretKey = _AppSecretKey;//App Secret Key
string UserIp = HttpContext.Connection.RemoteIpAddress.ToString();//提交验证的用户的IP地址
string parameters = string.Format("aid={0}&AppSecretKey={1}&Ticket={2}&Randstr={3}&UserIP={4}", aid, AppSecretKey, ticket, randstr, UserIp);
url = url + parameters;
//http get请求
HttpClient httpClient = new HttpClient();
string resulttoken = await httpClient.GetAsync(url).Result.Content.ReadAsStringAsync();
//验证结果
TencentCaptchaResultData tencentCaptcha = JsonConvert.DeserializeObject<TencentCaptchaResultData>(resulttoken);
if (tencentCaptcha.response != 1)//失败则抛出异常,反之就进行后面的用户密码验证,判定是否等成功
{
throw new Exception("防水墙验证失败!");
}
// return tencentCaptcha.response;
NetUser netUser = inET_UserLogin_DAL.Login(username, password);
var data = new Ret { };
if (netUser != null)
{
data = new Ret
{
Code = 200,
Msg = "成功",
Value = netUser
};
}
else
{
data = new Ret { Code = 404, Msg = "找不到资源", Value = null };
}
return data;
//return View();
}这样就弄好了 看下效果

评价
