ایجاد تصویر امنیتی در asp.net core

ساخت وبلاگ
با سلام و خسته نباشید خدمت تمامی اساتید و برنامه نویس های محترم
من قبلا برای تولید تصویر امنیتی تو asp.net mvs از یک CaptchaController که به درستی و بدون اشکال کار می کرد بعد از مهاجرت به .net core با یه کمی تغییرات تبدیل به کد زیر کردم مشکلی که هست اینه که وقتی وب سایت لود میشه عبارت امنیتی رو null میده در حالی که تصویر امنیتی درست هستش و حتما باید رفرش کنی که درست بشه لطفا کمک کنید

{
// 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>


کد Register.cshtml


<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">&times;</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>


کد اکشن login

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));
}
}
تمپوs...
ما را در سایت تمپوs دنبال می کنید

برچسب : نویسنده : خنج tempos بازدید : 157 تاريخ : يکشنبه 1 دی 1398 ساعت: 7:33