PDA

View Full Version : ثبتنام کاربر و انتقال آن به صفحه اصلی



sara_t
چهارشنبه 01 دی 1395, 11:41 صبح
سلام دوستان
دوستان من یه صفحه ثبتنام کاربر ساختم.میخام وقتی یه کاربری ثبتنام کرد به صفحه اصلی بره و لاگین کنه و موقع ثبت اطلاعات اگر کاربری دوبار روی صفحه ثبتنام کلیک کرد باعث نشود دوبار در دیتابیس ذخیره شود.
این کد رجیستر در کنترلر home:


public ActionResult Register(User user)
{
UserRepository blUser = new UserRepository();
if (ModelState.IsValid)
{

if (blUser.Add(user))
{
//موفق
MessageBox.Show("با موفقیت ثبت شد", MessageType.Success);
return RedirectToAction("Index");
}
else
{
//نا موفق
return MessageBox.Show("ثبت نشد", MessageType.Error);
}
}
else
{
//خطا مقداری
return MessageBox.Show(ModelState.GetErrors(), MessageType.Warning);
}
}



از این کد هم استفاده کردم ولی دیگه پیغام ثبت شد رو بهم نشون نمیده:

@*<script>
$('form').submit(function () {
if ($(this).valid()) {
$(':submit', this).attr('disabled', 'disabled');
}
});</script>*@

}

Moien Tajik
چهارشنبه 01 دی 1395, 14:20 عصر
اگر از Identity استفاده میکنید ، خودش براتون اینکار رو انجام میده .
اما در پروژه های پیشفرض بعد از ثبت نام ، خودش کاربر رو بلافاصله بعد از ثبت نام ، لاگین میکنه ; اگر میخواید به این شکل نباشه باید این کد رو :

await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);


از اکشن Register حذف کنید :

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
var result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);

return RedirectToAction("Index", "Home");
}
AddErrors(result);
}

// If we got this far, something failed, redisplay form

sara_t
چهارشنبه 01 دی 1395, 16:40 عصر
خیر من از identity استفاده نمیکنم.
از ممبرشیپ ستفاده کردم.
یه جدول یوزر دارم که کاربران رو توش ذخیره میکنم.
درکنترلر home هم یه اکشن login ویه اکشن register

اکشن لاگین بصورت زیر هست:

[HttpPost]
public ActionResult Login(string username, string password, bool rememberme)
{
var blUser = new UserRepository();
if (blUser.Exist(username, password))
{
FormsAuthentication.SetAuthCookie(username, rememberme);

return RedirectToAction("Index");
}
else
{
ViewBag.Message = "نام کاربری یا پسورد اشتباه است";
}
return View();
}
که authentication رو در گلوبال انجام دادم:

protected void FormsAuthentication_OnAuthenticate(Object sender, FormsAuthenticationEventArgs e)
{
if (FormsAuthentication.CookiesSupported == true)
{
if (Request.Cookies[FormsAuthentication.FormsCookieName] != null)
{
string username = FormsAuthentication.Decrypt(Request.Cookies[FormsAuthentication.FormsCookieName].Value).Name;
var blUser = new UserRepository();
string roles = blUser.Where(p => p.Email == username).Single().Roles;
e.User = new GenericPrincipal(new System.Security.Principal.GenericIdentity(username ), roles.Split(','));
}
}

بدرستی کد شما رو متوجه نشدم الان من باید زمانیکه یه یوزر ثبتنام میکنه رو بصورت اتوماتیک لاگین رو براش انجام بدم؟

sara_t
چهارشنبه 01 دی 1395, 18:01 عصر
من طبق کدی که شما گذاشتین کد ریجیستر خودم رو تغییر دادم. برنامه داره بدرستی کار میکنه با trace که انجام دادم اما redirect به صفحه index انجام نمیشه و تو صفحه register میمونه


public ActionResult Register(User user)
{
UserRepository blUser = new UserRepository();
if (ModelState.IsValid)
{
if (blUser.Add(user))
{
if (blUser.Exist(user.Email,user.Password))
{
FormsAuthentication.SetAuthCookie(user.Email, false);
}
//موفق
return RedirectToAction("Index");
}
else
{
//نا موفق
return MessageBox.Show("ثبت نشد", MessageType.Error);
}
}
else
{
//خطا مقداری
return MessageBox.Show(ModelState.GetErrors(), MessageType.Warning);
}
}

Moien Tajik
چهارشنبه 01 دی 1395, 22:25 عصر
از این کد استفاده کنید برای Redirect به صفحه index :

return RedirectToAction("Index", "Home");


چون اگر نام کنترلر رو ندید ، صفحه ی index کنترلر Account رو برای redirect تشخیص میده و دوباره مجدد به صفحه Register برمیگرده.

sara_t
پنج شنبه 02 دی 1395, 16:18 عصر
ممنون درست شد.
من اولین باره دارم وبسایت طراحی میکنم.میشه لطف کنین بگین چه نکاتی برای امنیت کاربرانی که ثبتنام میکنن باید به وبسایتم اضافه کنم.
چون من فقط همین authentication رو بکار بردم و اینکه چک میکنم یوزر تکراری ثبت نشده باشه.
ممنون

Moien Tajik
پنج شنبه 02 دی 1395, 16:22 عصر
در صفحه ثبت نام و ورود کاربران ، از Captcha استفاده کنید تا از ثبت نام ربات ها و Spammer ها جلوگیری شود.
آموزش : http://sahraweb.com/post/204/%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF-CAPTCHA-%D8%AF%D8%B1-ASP-MVC

sara_t
جمعه 03 دی 1395, 12:19 عصر
بسیار ممنون
من از این کد استفاده کردم.فقط چطور میتونم پیغام خطا رو تو پیج خودم نشون بدم و بصورت پیغام جاوااسگریپت تو یه پیج دیگه نباشه