{
// GET: Captcha
public IActionResult CaptchaImage(string prefix, bool noisy = true)
{
var rand = new Random((int)DateTime.Now.Ticks);
//generate new question
int a = rand.Next(10, 99);
int b = rand.Next(0, 9);
var captcha = string.Format("{0} + {1} = ?", a, b);
HttpContext.Session.SetString("Captcha" + prefix, (a + b).ToString());
FileContentResult img = null;
using (var mem = new MemoryStream())
using (var bmp = new Bitmap(130, 30))
using (var gfx = Graphics.FromImage((Image)bmp))
{
gfx.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;
gfx.SmoothingMode = SmoothingMode.AntiAlias;
gfx.FillRectangle(Brushes.White, new Rectangle(0, 0, bmp.Width, bmp.Height));
//add noise
if (noisy)
{
int i, r, x, y;
var pen = new Pen(Color.Yellow);
for (i = 1; i < 10; i++)
{
pen.Color = Color.FromArgb(
(rand.Next(0, 255)),
(rand.Next(0, 255)),
(rand.Next(0, 255)));
r = rand.Next(0, (130 / 3));
x = rand.Next(0, 130);
y = rand.Next(0, 30);
gfx.DrawEllipse(pen, x - r, y - r, r, r);
}
}
//add question
gfx.DrawString(captcha, new Font("Tahoma", 15), Brushes.Gray, 2, 3);
//render as Jpeg
bmp.Save(mem, System.Drawing.Imaging.ImageFormat.Jpeg);
img = this.File(mem.GetBuffer(), "image/Jpeg");
}
return img;
}
}
<script>
$('.refreshCaptcha').click(function () {
var d = new Date();
$(".imgcpatcha").attr("src", "/Captcha/CaptchaImage?" + d.getTime());
})
</script>
<div class="modal fade" id="myModal" tabindex="-1" role="dialog">
<div class="modal-dialog" role="document">
<div class="modal-content modal-info">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
</div>
<div class="modal-body real-spa">
<div class="login-grids">
<div class="login">
<div class="login-left">
<form asp-controller="Home" asp-action="LogIn">
<h3>ورود</h3>
<input type="text" name="UserId2" placeholder="کلمه کاربری" />
<input type="password" name="Password2" placeholder="کلمه عبور" />
<div>
<div style="float:right">
<img alt="Captcha" class="imgcpatcha" src="@Url.Action("CaptchaImage", "Captcha")" style="" />
</div>
<div style="float:right">
<img src="~/images/refresh.png" class="img-responsive refreshCaptcha" width="30" height="30" />
</div>
<div style="clear:both"></div>
</div>
<input type="text" name="Captcha" placeholder="جواب سوال؟" />
<h4><a href="#">رمز فراموش شده</a> </h4>
<div class="single-bottom">
@Html.CheckBox("Remember", false, new { @style = "margin :0px" })
<label for="brand"><span></span>مرا به خاطر بسپار</label>
</div>
<input type="submit" value="ورود">
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
public async Task<IActionResult> LogIn(string UserId2, string Password2, bool Remember, string Captcha)
{
if (Password2 == null || UserId2==null)
{
TempData["Message_Login"] = "نام کاربری یا کلمه عبور راوارد نکرده اید";
return RedirectToAction(nameof(Index));
}
string coderPass = Encript_Decript.codare(Password2).Trim();
if (HttpContext.Session.GetString("Captcha").Trim() == null || HttpContext.Session.GetString("Captcha").ToString( ) != Captcha.Trim())
{
TempData["Message_Login"] = "جواب سوال امنیتی اشتباه است";
return RedirectToAction(nameof(Index));
}
try
{
rdb = new RegisterRepository(db);
var regData = await rdb.Find(UserId2.Trim());
if (regData == null)
{
TempData["Message_Login"] = "کلمه کاربری وجود ندارد";
return RedirectToAction(nameof(Index));
}
if (regData.Password == coderPass.Trim())
{
var claims = new List<Claim>
{
new Claim(ClaimTypes.Name, regData.UserId.Trim()),
new Claim(ClaimTypes.Role, regData.Roles.Trim()),
};
var claimsIdentity = new ClaimsIdentity(
claims, CookieAuthenticationDefaults.AuthenticationScheme) ;
var authProperties = new AuthenticationProperties
{
IsPersistent = Remember,
};
await HttpContext.SignInAsync(
CookieAuthenticationDefaults.AuthenticationScheme,
new ClaimsPrincipal(claimsIdentity),
authProperties);
return RedirectToAction(nameof(Index));
}
else
{
TempData["Message_Login"] = "کلمه عبور نادرست است";
return RedirectToAction(nameof(Index));
}
}
catch (Exception)
{
return RedirectToAction(nameof(Error));
}
}
برچسب:
نویسنده: خنج