【发布时间】:2017-09-05 21:27:08
【问题描述】:
我一直在开发一个简单的 web api,它接受某个电话号码并返回一个 pin 码。这个想法是,如果密码错误 10 次,我想删除/限制用户登录。可以在 SQL Server 或 c# 代码中完成吗? 感谢所有帮助
在业务层验证:
public void validate(validateRequest vReq, headers head, ref validateResponse vRes)
{
vRes = new validateResponse();
int isCorrect = vRes.isCorrect;
Data dal = new Data();
dal.OpenConnection();
dal.valpinCode(vReq.pinCode, ref isCorrect);
if (isCorrect == 1)
{
vRes.result.code = 0;
vRes.result.message = "Successful";
vRes.isCorrect = 0;
}
else
{
vRes.result.code = -3;
vRes.result.message = "Access Denied.";
vRes.isCorrect = -1;
}
我在数据层中的 valpincode:
public void valpinCode(string pinCode, ref int isCorrect)
{
try
{
using (IDbConnection db = new SqlConnection(c.connstr))
{
if (db.State != ConnectionState.Open)
db.Open();
DynamicParameters param = new DynamicParameters();
param.Add("@pincode", pinCode);
param.Add("@exist", dbType: DbType.Int32, direction: ParameterDirection.Output);
con.Execute("valpin", param, commandType: CommandType.StoredProcedure);
isCorrect = param.Get<Int32>("@exist");
if (db.State != ConnectionState.Closed)
db.Close();
}
}
catch (Exception ex)
{
Common log = new Common();
log.LogError(ex);
}
}
我的 valpin SP:
@pincode nvarchar(50),
@exist bit output
AS
BEGIN
IF NOT EXISTS(
SELECT *
FROM Users
WHERE pinCode=@pincode)
BEGIN
SET @exist=0
END
ELSE
BEGIN
SELECT *
FROM Users
WHERE pinCode=@pincode
SET @exist=1
END
END
用户表:
idUser phone countrycode pincode
1 7006100 961 5716
12 7006107 961 77709
注意密码是随机生成的
【问题讨论】:
-
绝对可以使用 C# 和/或 SQL 来完成。
-
pin码错误计数是数据,所以应该去SQL server。初始化、递增、重置和使用该计数器的逻辑可以分发到 C#、从 C# 调用的 SQL 查询或 SQL 存储过程,具体取决于您选择的软件架构、数据访问方法和分层。如果您显示您已经与您的问题一起使用的代码,您只会在此处获得有用的答案。
-
对不起,我用我拥有的代码更新了问题
-
@dlatikay 有没有例子说明它是如何完成的?
-
几乎没有。但是有了代码,现在我们要去某个地方了。
Users表是否已经有一个 int 列来跟踪每个用户的 pin 错误计数?您将需要另一种识别用户的方法(电话号码?)并将其传递给存储过程,通过电话号码查找用户,查看 PIN 是否匹配,如果不匹配,更新计数器,如果达到或超过10、设置另一列锁定用户。
标签: c# sql sql-server asp.net-web-api