View Full Version : سوال: کد لاگین با MVC
sadrapro
سه شنبه 27 اسفند 1392, 10:42 صبح
سلام دوستان
کسی میتونه کد یا یک نمونه پروژه لاگین کاربر به سایت رو بده؟
ASP.NET MVCبا Entity Framework
مهدی کرامتی
سه شنبه 27 اسفند 1392, 10:54 صبح
خود MVC مکانیسم لاگین رو در AccountController داره، حتی لینک های لاگین و رجیستر و ... رو بالای صفحات سایت اضافه می کنه.
sadrapro
سه شنبه 27 اسفند 1392, 11:01 صبح
درسته اما من میخوام این کار با اتصال به دیتابیس و EF کار کنه.
مهدی کرامتی
سه شنبه 27 اسفند 1392, 11:26 صبح
منظورتون اینه که نمی خواهید از مکانیسم درون ساز ASP.NET MVC استفاده کرده و خودتان سیستم لاگین اختصاصی و دلخواه بنویسید؟
sadrapro
سه شنبه 27 اسفند 1392, 12:42 عصر
بله دقیقا منظورم اینه.
میخوام سیستم با Entity Framework کار کنه و نام کاربری و رمز عبور رو از دیتابیس بخونه و چک کنه
alef.divar
سه شنبه 27 اسفند 1392, 13:44 عصر
سلام
کد کنترل:
public ActionResult login()
{
return View();
}
[HttpPost]
public ActionResult login2()
{
try
{
string name = Request["txt_name"].ToString().Trim();
string pass = Request["txt_pass"].ToString().Trim();
pass = cryController.Encrypt(pass);
var Users = db.Users.Where(x => x.us_name == name && x.us_pass == pass).ToList();
if (Users.Count() == 0)
{
ViewBag.Message = "نام کاربری یا رمز عبور را اشتباه وارد کرده اید";
return View("login");
}
else
{
HttpCookieCollection cookies = Request.Cookies;
if (cookies["ad"] != null)
{
Response.Cookies.Remove("CookieLogin");
}
else
{
}
HttpCookie user = new HttpCookie("CookieLogin");
user.Values["admin"] = "true";
user.Expires = DateTime.Now.AddDays(1);
Response.Cookies.Add(user);
Response.Redirect("~/Admin");
}
}
catch (Exception)
{
ViewBag.Message = "نام کاربری یا رمز عبور را اشتباه وارد کرده اید";
}
return View("login");
}
کد view:
<div class="reg_box" style="width: 450px; padding-right: 10px;">
<label>نام کاربری</label>
<br />
<input type="text" name="txt_name" />
<br />
<label>رمز عبور</label>
<br />
<input type="password" name="txt_pass" />
</div>
<input type="submit" class="submit_reg" value="ورود" />
if (IsPost)
{
<span>@ViewBag.Message</span>
}
sadrapro
سه شنبه 27 اسفند 1392, 15:07 عصر
ممنون از لطف شما
خط 13 cryController همون HomeController هست؟ اگه آره متد Encrypt پیغام خطا میده
خط 14 db همون entites تو EF هست؟
alef.divar
سه شنبه 27 اسفند 1392, 23:28 عصر
cryController یه کلاسه که من برای encode کردن , decode کردن ازش استفاده کردم فقط همین.
در مورد خط 14 هم آره، همون بانک مورد استفاده است.
Dr.Bronx
چهارشنبه 28 اسفند 1392, 01:15 صبح
یک سوال فنی در رابطه با کد شما .
اگر من بیام یک کوکی بسازم و مقدارش رو admin قرار بدم چه اتفاقی میفته ؟
sadrapro
چهارشنبه 28 اسفند 1392, 11:03 صبح
ممنون و سپاس فراوان
Cybersilent
چهارشنبه 28 اسفند 1392, 11:40 صبح
پیشنهاد می کنم این مطالب رو مطالعه کنید.
البته اگر از vs 2013 استفاده می کنید.
معرفی ASP.NET Identity
http://www.dotnettips.info/post/1630/%D9%85%D8%B9%D8%B1%D9%81%DB%8C-asp-net-identity
متدهای احراز هویت در VS 2013
http://www.dotnettips.info/post/1633/%D9%85%D8%AA%D8%AF%D9%87%D8%A7%DB%8C-%D8%A7%D8%AD%D8%B1%D8%A7%D8%B2-%D9%87%D9%88%DB%8C%D8%AA-%D8%AF%D8%B1-vs-2013
افزودن ASP.NET Identity به یک پروژه Web Forms
http://www.dotnettips.info/post/1640/%d8%a7%d9%81%d8%b2%d9%88%d8%af%d9%86-asp-net-identity-%d8%a8%d9%87-%db%8c%da%a9-%d9%be%d8%b1%d9%88%da%98%d9%87-web-forms
ساخت یک اپلیکیشن ساده ToDo با ASP.NET Identity
http://www.dotnettips.info/post/1643/%d8%b3%d8%a7%d8%ae%d8%aa-%db%8c%da%a9-%d8%a7%d9%be%d9%84%db%8c%da%a9%db%8c%d8%b4%d9%86-%d8%b3%d8%a7%d8%af%d9%87-todo-%d8%a8%d8%a7-asp-net-identity
دریافت اطلاعات بیشتر از Social Provider ها در VS 2013
http://www.dotnettips.info/post/1644/%d8%af%d8%b1%db%8c%d8%a7%d9%81%d8%aa-%d8%a7%d8%b7%d9%84%d8%a7%d8%b9%d8%a7%d8%aa-%d8%a8%db%8c%d8%b4%d8%aa%d8%b1-%d8%a7%d8%b2-social-provider-%d9%87%d8%a7-%d8%af%d8%b1-vs-2013
سفارشی کردن ASP.NET Identity در MVC 5
http://www.dotnettips.info/post/1645/%d8%b3%d9%81%d8%a7%d8%b1%d8%b4%db%8c-%da%a9%d8%b1%d8%af%d9%86-asp-net-identity-%d8%af%d8%b1-mvc-5
افزودن تصدیق ایمیل به ASP.NET Identity در MVC 5
http://www.dotnettips.info/post/1646/%d8%a7%d9%81%d8%b2%d9%88%d8%af%d9%86-%d8%aa%d8%b5%d8%af%db%8c%d9%82-%d8%a7%db%8c%d9%85%db%8c%d9%84-%d8%a8%d9%87-asp-net-identity-%d8%af%d8%b1-mvc-5
پیاده سازی Password Policy سفارشی توسط ASP.NET Identity
http://www.dotnettips.info/post/1654/%d9%be%db%8c%d8%a7%d8%af%d9%87-%d8%b3%d8%a7%d8%b2%db%8c-password-policy-%d8%b3%d9%81%d8%a7%d8%b1%d8%b4%db%8c-%d8%aa%d9%88%d8%b3%d8%b7-asp-net-identity
alef.divar
چهارشنبه 28 اسفند 1392, 20:27 عصر
یک سوال فنی در رابطه با کد شما .
اگر من بیام یک کوکی بسازم و مقدارش رو admin قرار بدم چه اتفاقی میفته ؟
خوب کاربر تصدیق هویت شده معرفی میشید!
بهتره مقدار کوکی admin رو با یک کلید دلخواه encode کنیم.
مثلا کلیدی که از username و یا برخی دیگه از اطلاعات کاربر درش استفاده شده و سپس مقدار کوکی admin رو برای تصدیق هویت شدن کاربر در نظر بگیریم.
این یه کد آموزشی بود که من برای sadrapro گذاشتم.
حالا به نظر شما راه امن تری وجود داره؟
لطفا راهنمایی کنید.
مهدی کرامتی
جمعه 01 فروردین 1393, 09:26 صبح
سیستم های احراز هویت جدیدی که در MVC به کار گرفته شده اند (SimpleMembership و ...) همگی پشت صحنه از همان متدهای Forms Authentication استفاده می کنند. من در پروژه های خودم کد کنترلر Account رو به این شکل تغییر دادم:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using eShopMvc.Models;
using System.Web.Security;
namespace eShopMvc.Controllers
{
public class AccountController : Controller
{
private eShopMVCEntities db = new eShopMVCEntities();
//
// GET: /Account/
public ActionResult Login(string ReturnUrl = "")
{
ViewBag.Message = "";
ViewBag.ReturnUrl = ReturnUrl;
return View();
}
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel login, string ReturnUrl)
{
// How to MD5 Hash password:
string source = "mkamkadmvvkd";
string hashed = FormsAuthentication.HashPasswordForStoringInConfig File(source, "MD5");
//string ReturnUrl = Request.QueryString["ReturnUrl"];
if (ModelState.IsValid)
{
if (db.Users.Any(u => u.Username == login.Username && u.Password == login.Password))
{
FormsAuthentication.SetAuthCookie(login.Username, login.RememberMe);
if (!string.IsNullOrEmpty(ReturnUrl))
{
return Redirect(ReturnUrl);
}
else
{
return Redirect(FormsAuthentication.DefaultUrl);
}
}
}
ModelState.AddModelError("", "نام کاربر یا کلمه عبور صحیح نیست");
return View(login);
}
public ActionResult Logout()
{
FormsAuthentication.SignOut();
return RedirectToAction("Index", "Home");
}
public ActionResult Register()
{
return View();
}
[HttpPost]
public ActionResult Register(RegisterModel register)
{
if (ModelState.IsValid)
{
Users user = new Users()
{
Username = register.Username,
Password = register.Password,
Email = register.Email,
Phone = register.Phone,
Address = register.Address,
RoleID = 2
};
db.Users.Add(user);
db.SaveChanges();
FormsAuthentication.RedirectFromLoginPage(register .Username, true);
}
return View();
}
}
}
کلاس LoginModel:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
namespace eShopMvc.Models
{
public class LoginModel
{
[Display(Name = "نام کاربر")]
[Required(ErrorMessage="لطفا {0} را وارد کنید")]
public string Username { get; set; }
[Display(Name = "کلمه عبور")]
[Required(ErrorMessage="لطفا {0} را وارد کنید")]
[DataType(DataType.Password)]
public string Password { get; set; }
[Display(Name = "مشخصات من را به خاطر بسپار")]
public bool RememberMe { get; set; }
}
}
و کلاس RegisterModel:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
//using System.Web.Mvc;
using System.Web.Mvc;
namespace eShopMvc.Models
{
public class RegisterModel
{
[Display(Name = "نام کاربر")]
[Required(ErrorMessage = "لطفا {0} را وارد کنید")]
public string Username { get; set; }
[Display(Name = "کلمه عبور")]
[Required(ErrorMessage = "لطفا {0} را وارد کنید")]
[DataType(DataType.Password)]
public string Password { get; set; }
[Display(Name = "کلمه عبور (مجدد)")]
[Required(ErrorMessage = "لطفا {0} را وارد کنید")]
[DataType(DataType.Password)]
[Compare("Password",ErrorMessage = "{0} و {1} یکسان نیست.")]
public string PasswordConfirm { get; set; }
[Display(Name = "آدرس ایمیل")]
[Required(ErrorMessage = "لطفا {0} را وارد کنید")]
[RegularExpression(@"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*", ErrorMessage = "{0} وارد شده صحیح نیست")]
public string Email { get; set; }
[Display(Name = "شماره تماس")]
[Required(ErrorMessage = "لطفا {0} را وارد کنید")]
public string Phone { get; set; }
[Display(Name = "آدرس پستی")]
[Required(ErrorMessage = "لطفا {0} را وارد کنید")]
//[DataType(DataType.Html)]
//[AllowHtml]
public string Address { get; set; }
}
}
bitcob589
چهارشنبه 24 اردیبهشت 1393, 08:41 صبح
سیستم های احراز هویت جدیدی که در MVC به کار گرفته شده اند (SimpleMembership و ...) همگی پشت صحنه از همان متدهای Forms Authentication استفاده می کنند. من در پروژه های خودم کد کنترلر Account رو به این شکل تغییر دادم:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using eShopMvc.Models;
using System.Web.Security;
namespace eShopMvc.Controllers
{
public class AccountController : Controller
{
private eShopMVCEntities db = new eShopMVCEntities();
//
// GET: /Account/
public ActionResult Login(string ReturnUrl = "")
{
ViewBag.Message = "";
ViewBag.ReturnUrl = ReturnUrl;
return View();
}
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel login, string ReturnUrl)
{
// How to MD5 Hash password:
string source = "mkamkadmvvkd";
string hashed = FormsAuthentication.HashPasswordForStoringInConfig File(source, "MD5");
//string ReturnUrl = Request.QueryString["ReturnUrl"];
if (ModelState.IsValid)
{
if (db.Users.Any(u => u.Username == login.Username && u.Password == login.Password))
{
FormsAuthentication.SetAuthCookie(login.Username, login.RememberMe);
if (!string.IsNullOrEmpty(ReturnUrl))
{
return Redirect(ReturnUrl);
}
else
{
return Redirect(FormsAuthentication.DefaultUrl);
}
}
}
ModelState.AddModelError("", "نام کاربر یا کلمه عبور صحیح نیست");
return View(login);
}
public ActionResult Logout()
{
FormsAuthentication.SignOut();
return RedirectToAction("Index", "Home");
}
public ActionResult Register()
{
return View();
}
[HttpPost]
public ActionResult Register(RegisterModel register)
{
if (ModelState.IsValid)
{
Users user = new Users()
{
Username = register.Username,
Password = register.Password,
Email = register.Email,
Phone = register.Phone,
Address = register.Address,
RoleID = 2
};
db.Users.Add(user);
db.SaveChanges();
FormsAuthentication.RedirectFromLoginPage(register .Username, true);
}
return View();
}
}
}
کلاس LoginModel:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
namespace eShopMvc.Models
{
public class LoginModel
{
[Display(Name = "نام کاربر")]
[Required(ErrorMessage="لطفا {0} را وارد کنید")]
public string Username { get; set; }
[Display(Name = "کلمه عبور")]
[Required(ErrorMessage="لطفا {0} را وارد کنید")]
[DataType(DataType.Password)]
public string Password { get; set; }
[Display(Name = "مشخصات من را به خاطر بسپار")]
public bool RememberMe { get; set; }
}
}
و کلاس RegisterModel:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
//using System.Web.Mvc;
using System.Web.Mvc;
namespace eShopMvc.Models
{
public class RegisterModel
{
[Display(Name = "نام کاربر")]
[Required(ErrorMessage = "لطفا {0} را وارد کنید")]
public string Username { get; set; }
[Display(Name = "کلمه عبور")]
[Required(ErrorMessage = "لطفا {0} را وارد کنید")]
[DataType(DataType.Password)]
public string Password { get; set; }
[Display(Name = "کلمه عبور (مجدد)")]
[Required(ErrorMessage = "لطفا {0} را وارد کنید")]
[DataType(DataType.Password)]
[Compare("Password",ErrorMessage = "{0} و {1} یکسان نیست.")]
public string PasswordConfirm { get; set; }
[Display(Name = "آدرس ایمیل")]
[Required(ErrorMessage = "لطفا {0} را وارد کنید")]
[RegularExpression(@"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*", ErrorMessage = "{0} وارد شده صحیح نیست")]
public string Email { get; set; }
[Display(Name = "شماره تماس")]
[Required(ErrorMessage = "لطفا {0} را وارد کنید")]
public string Phone { get; set; }
[Display(Name = "آدرس پستی")]
[Required(ErrorMessage = "لطفا {0} را وارد کنید")]
//[DataType(DataType.Html)]
//[AllowHtml]
public string Address { get; set; }
}
}
چگونه تشخیص دهیم کاربر لاگین کرده است و مجاز به مشاهده صفحه جاری است
goodfriends
شنبه 03 آبان 1393, 19:07 عصر
سلام
دوستان من به یه مشکل خوردم که هیچ جایی واسش جوابی نیست.اگه راهنمایی کنید ممنون می شم.من نرم افزارم رو codefirst نوشتم و می خوام قبل از فرستادن داده ها به پایگاه داده فیلد پسورد رو hash کنم.چطور می تونم این کار رو انجام بدم؟
کد کنترلرم این هست:
[HttpPost] [ValidateAntiForgeryToken]
public ActionResult Register(User U)
{
if (ModelState.IsValid)
{
using (ICWebContext ICdb=new ICWebContext())
{
ICdb.Users.Add(U);
ICdb.SaveChanges();
ModelState.Clear();
//U = null;
ViewBag.Message = "با موفقیت ثبت شد";
}
}
ViewBag.GenderID = new SelectList(db.Genders,"GenderID", "GndType");
return View();
کد view به صورت زیر هست
@using (Ajax.BeginForm("Register","Password",new AjaxOptions{HttpMethod="POST"})){
@Html.ValidationSummary(true)
<fieldset class="form-horizontal" dir="rtl" style="font-family:Tahoma;font-size:12px">
<legend class="page-header h3">بخش ثبت نام</legend>
@Html.AntiForgeryToken()
@if (ViewBag.Message!=null)
{
<div class="alert-success">
@ViewBag.Message
</div>
}
<div class="col-lg-8"></div>
<div class="col-lg-4">
<div>
@Html.LabelFor(model => model.Firstname)
@Html.TextBoxFor(model => model.Firstname, new { @class = "form-control inputSuccess3" })
@Html.ValidationMessageFor(model => model.Firstname)
</div>
<div>
@Html.LabelFor(model => model.Lastname)
@Html.TextBoxFor(model => model.Lastname, new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.Lastname)
</div>
<div>
@Html.LabelFor(model => model.Username)
@Html.TextBoxFor(model => model.Username, new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.Username)
</div>
<div>
@Html.LabelFor(model => model.Password)
@Html.PasswordFor(model => model.Password, new { @class = "form-control" , name="pass"})
@Html.ValidationMessageFor(model => model.Password)
</div>
<div>
@Html.Label("تکرار رمز عبور")
@Html.PasswordFor(model => model.ConfirmPassword, new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.ConfirmPassword)
</div>
<div>
@Html.LabelFor(model => model.Email)
@Html.TextBoxFor(model => model.Email, new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.Email)
</div>
<div>
@Html.LabelFor(model => model.Tel)
@Html.TextBoxFor(model => model.Tel, new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.Tel)
</div>
<div>
@Html.LabelFor(model => model.Address)
@Html.TextBoxFor(model => model.Address, new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.Address)
</div>
<div>
@Html.Label("جنسیت")
@Html.DropDownList("GenderID",String.Empty)
</div>
<div>
<input type="submit" value="ایجاد حساب کاربری" class="btn-success" />
</div>
</div>
</fieldset>
کدhash کردن داده هم به صورت زیر هست
public class convertpa {
public String DataHash(String input)
{
MD5 md5 = MD5.Create();
byte[] inputbyte = Encoding.ASCII.GetBytes(input);
byte[] hash = md5.ComputeHash(inputbyte);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < hash.Length; i++)
{
sb.Append(hash[i].ToString("X2"));
}
return sb.ToString();
}
}
}
کد کلاسم هم به صورت زیر هست
public class User {
[Key]
public int PersonID { get; set; }
[Display(Name = "نام", Description = "نام را وارد کنید")]
[Required]
public String Firstname { get; set; }
[Display(Name = "نام خانوادگی", Description = "نام خانوادگی را وارد کنید")]
[Required]
public String Lastname { get; set; }
[Display(Name = "نام کاربری", Description = "نام کاربری را وارد کنید")]
[Required]
[MaxLength(70, ErrorMessage = "حداکثر 70 کاراکتر باشد")]
[MinLength(6, ErrorMessage = "حداقل 6 کاراکتر باشد")]
public String Username { get; set; }
[Display(Name = "رمز ورود", Description = "رمز ورود را وارد کنید")]
[Required]
[DataType(DataType.Password)]
public String Password { get; set; }
[Display(Name = "آدرس", Description = "آدرس را وارد کنید")]
public String Address { get; set; }
[Display(Name = "ایمیل", Description = "ایمیل را وارد کنید")]
[Required]
public String Email { get; set; }
[Display(Name = "شماره تماس", Description = "شماره تماس را وارد کنید")]
[DataType(DataType.PhoneNumber)]
public Nullable<int> Tel { get; set; }
[Display(Name = "جنسیت", Description = "جنسیت را وارد کنید")]
[Required]
public int GenderID { get; set; }
[ForeignKey("GenderID")]
public virtual Gender Gender { get; set; }
[NotMapped]
[Compare("Password")]
[DataType(DataType.Password)]
public string ConfirmPassword { get; set; }
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.