PDA

View Full Version : کدهای مربوط به لاگین کردن درسته ؟



RIG000
دوشنبه 22 مهر 1392, 10:17 صبح
این کلاس خود table هست که generate کردم ...

public partial class tblUser
{
public int Id { get; set; }
public string Name { get; set; }
public string Lname { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public string Email { get; set; }
public string Address { get; set; }
public string City { get; set; }
public string Mobile { get; set; }
public string Tell { get; set; }
public System.DateTime? InsertDate { get; set; }

}
این کلاسی هست که خودم ساختم تاRemember Me رو بهش اضافه کنم ...

public class SetLogin
{
public string UserName { get; set; }
public string Password { get; set; }
public bool RememberMe { get; set; }
}
این صفحه اصلی ماست - پیج اول سایت

<div style="float: right">

@if( Request.IsAuthenticated)
{
@:<p>Welcome,@User.Identity.Name</p>
@Html.ActionLink("خروج", "Logout")
}
else{
@Html.ActionLink("ورود", "login")
<br />
@Html.ActionLink("ثبت نام", "GetUser")
}
</div>
این ویو فرم لاگین ...

<div class="editor-label">
<b> @Html.Label("نام کاربری")</b>
</div>
<div class="editor-field">
@Html.EditorFor(model => model.UserName)
@Html.ValidationMessageFor(model => model.UserName)
</div>

<div class="editor-label">
<b> @Html.Label("رمز ورود")</b>
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Password)
@Html.ValidationMessageFor(model => model.Password)
</div>
<div class="editor-label">
<b> @Html.Label("رمز ورود")</b>
</div>
<div class="editor-field">
@Html.CheckBoxFor(model => model.RememberMe)
@Html.Label("مرا به خاطر بسپار")
@*@Html.ValidationMessageFor(model => model.Password)*@
</div>
و این هم کدهایی که میخام ببینید تو action نوشت م...

[HttpGet]
public ActionResult login()
{
return View();
}
[HttpPost]
public ActionResult login(Models.SetLogin user)
{
if (ModelState.IsValid)
{
Models.ToranjEntities db = new Models.ToranjEntities();
var query= from f in db.tblUser
where f.UserName==user.UserName && f.Password==user.Password
select f.UserName;
if (query==null)
{
ModelState.AddModelError("", "Login data is incorrect!");
}
else
{
FormsAuthentication.SetAuthCookie(user.UserName, user.RememberMe);
return RedirectToAction("MainView", "Home");
}
}
return View(user);
}

public ActionResult Logout()
{
FormsAuthentication.SignOut();
return RedirectToAction("MainView", "Home");
}

لطفا" جایی مشکل داره بگید ...

RIG000
دوشنبه 22 مهر 1392, 10:25 صبح
در ضمن اجرا میگیرم ورود و ثبت نام رو میاره .. و خروج رو نمیاره ...
بعد میرم فرم لاگین ... و اونجا مقدار میزنم نمیزنم و .... هر چی ...
دوباره میاد تو فرم اولی سایت و هیچ کاری انجام نمیده ..!!!؟؟؟

RIG000
دوشنبه 22 مهر 1392, 12:10 عصر
کسی نمی تونه کمکم کنه؟

star_rh
دوشنبه 22 مهر 1392, 13:02 عصر
خروج رو وقتی میاره که کاربر وارد شده باشه.
وقتی لاگین می کنه بایستی نام کاربری یکتا رو پیدا کنی SingleOrDefault.
بعد پسورد را مطابقت بدی اگه درست بود لاگین رو انجام بده . برای اینکه وقتی مقداری ندادی جایی نره از Validation استفاده کن. سمت سرور و کاربر.

RIG000
دوشنبه 22 مهر 1392, 13:13 عصر
ممنون اما

var query= (from f in db.tblUser
where f.UserName==user.UserName && f.Password==user.Password
select f.UserName).SingleOrDefault();

validation رو از jquery استفاده میکنم ... اون مشکلی نداره ...
الان یه user و password تو sql دارم . مثلا x3 و 123456 حالا تو لاگین این یوزر و پس رو وارد کردم ....
دوباره میاد به صفحه اصلی و همون دکمه ورود و ثبت نام رو میاره اون بالا.... یعنی لاگین نشده ....
اگه میشد باید دکمه خروج رو میاورد دیگه .. مشکل از کجاست؟

RIG000
دوشنبه 22 مهر 1392, 13:30 عصر
یه سوال دیگه ..
اگه بخام مثلا وقتبی لاگین کرد واومد به صفحه اول؟ یه هر صفحه ای باید این کد رو تو اون صفحه ها بذاریم؟

<div style="float: right">

@if( Request.IsAuthenticated)
{
@:<p>Welcome,@User.Identity.Name</p>
@Html.ActionLink("خروج", "Logout")
}
else{
@Html.ActionLink("ورود", "login")

@Html.ActionLink("ثبت نام", "GetUser")
}
</div>




؟؟؟؟؟
یه چی دیگه اگه بعد لاگین وارد صفحه ای شد و ما مثلانام و نام خانوادگیش رو خاستیم تا بالای صفحه نشون بدیم چی میشه؟ مثل یاهو که اون بالا نام ما رو میزنه ...؟

RIG000
دوشنبه 22 مهر 1392, 13:34 عصر
این خط کد ها چیکار میکنن؟
1 -

FormsAuthentication.SetAuthCookie(user.UserName, user.RememberMe); return RedirectToAction("MainView", "Home");

2-

return View(user);
البته تو این کدها کاربردشون چیه ؟
اولی فک کنم واسه این هست که تو سیستم لاگین کننده یه کوکی بسازه ..
و دومی واسه اینه که مقدار ها رو تو خودش نگه داره تا تو صفحه ای که خاستسم بریم برامون بیاره؟

RIG000
دوشنبه 22 مهر 1392, 14:16 عصر
دوستان منم تا همین جا می تونستم بیارمش...
لطفا" یکی یه راهنمایی کنه نمیدونم چرا کار نمیکنه!!

star_rh
دوشنبه 22 مهر 1392, 18:32 عصر
برای اینکه تو همه صفحه هات نام کاربر نمایش بده اون کد رو تو Master layout بزار. اگه از empty استفاده نمی کردی این ها همش موجود بود.
وقتی میره به صفحه Home یعنی تا Redirect پیشرفته . شاید نام کاربر empty هستش.

zahra6688
دوشنبه 22 مهر 1392, 21:48 عصر
به نظر من بهتره شما یک پروژه ی asp.net mvc 4 از نوع internet application ایجاد کنید. در این نوع پروژه در کنترلر AccountController یک مکانیسم لاگین به طور کامل پیاده سازی شده است. در این پروژه از simpleMembership provider جهت مدیریت لاگین و یوزرها استفاده می‌شود. در هر قسمت این پروژه اگر مشکلی داشتید حتما بپرسید.
جهت لاگین باید از (()using (Html.BeginForm@ و یک دکمه از نوع submit استفده کنید. اگر view ی login از این پروژه را مشاهده کنید متوجه می‌شوید.
همچنین Request.IsAuthenticated بررسی می کند که request شامل اطلاعاتی از یک user هست یا نه. در واقع یعنی اینکه یوزری در سیستم قبلا لاگین شده یا نه و در صورت لاگین بودن، با استفاده از دستور User.Identity.Name می توان از شی User در context وجود دارد، نام کاربری Userرا گرفت.

RIG000
سه شنبه 23 مهر 1392, 08:19 صبح
برای اینکه تو همه صفحه هات نام کاربر نمایش بده اون کد رو تو Master layout بزار. اگه از empty استفاده نمی کردی این ها همش موجود بود.
وقتی میره به صفحه Home یعنی تا Redirect پیشرفته . شاید نام کاربر empty هستش.
تو لایوت گذاشتم... مستر رو فهمیدم ...
نام کاربری داره ...
این قسمت کار نمیکنه عملا ....

@if( Request.IsAuthenticated) {
@:<p>Welcome,@User.Identity.Name</p>

نمیدونم چشه!! حالا چیزی به نظرتون اومد بگید .. موردم به خدا...

RIG000
سه شنبه 23 مهر 1392, 08:21 صبح
به نظر من بهتره شما یک پروژه ی asp.net mvc 4 از نوع internet application ایجاد کنید. در این نوع پروژه در کنترلر AccountController یک مکانیسم لاگین به طور کامل پیاده سازی شده است. در این پروژه از simpleMembership provider جهت مدیریت لاگین و یوزرها استفاده می‌شود. در هر قسمت این پروژه اگر مشکلی داشتید حتما بپرسید.
جهت لاگین باید از (()using (Html.BeginForm@ و یک دکمه از نوع submit استفده کنید. اگر view ی login از این پروژه را مشاهده کنید متوجه می‌شوید.
همچنین Request.IsAuthenticated بررسی می کند که request شامل اطلاعاتی از یک user هست یا نه. در واقع یعنی اینکه یوزری در سیستم قبلا لاگین شده یا نه و در صورت لاگین بودن، با استفاده از دستور User.Identity.Name می توان از شی User در context وجود دارد، نام کاربری Userرا گرفت.
یعنی برم از اول پروژه internet application بگییرم :( ... اینجوری راهی نداشت ...

RIG000
سه شنبه 23 مهر 1392, 08:23 صبح
User.Identity.Name این از کجا داره اطلاعاتشو دریافت میکنه؟ دیتابیس؟

RIG000
سه شنبه 23 مهر 1392, 08:29 صبح
عملا این انجام نمیگیره!!!

Request.IsAuthenticated
مشکل این از کجا میشه که نمیتونه کارشو انجام بده.

RIG000
سه شنبه 23 مهر 1392, 09:24 صبح
یه internrt application with account controller ساختم که ...

your logo here (http://localhost:2461/)

Hello, capita (http://localhost:2461/Account/Manage)! Log off

Home (http://localhost:2461/)
About (http://localhost:2461/Home/About)
Contact (http://localhost:2461/Home/Contact)



Home Page.

Modify this template to jump-start your ASP.NET MVC application.


که اصلا capita (http://localhost:2461/Account/Manage) تو دیتابیس من ذخیره شده !!!! اما تو اینترنت اپلیکشن اینجا دیده میشه!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! من فقط اینترنت اپلیکشن رو ساختم و اجرا کردم همین!!
خودمم موندم چرا اینجوری شده ....!!! من به این اصلا دیتابیس نزدم!

RIG000
سه شنبه 23 مهر 1392, 10:09 صبح
حالا تو لاگین میرم یا رجیستر رمز و پسورد رو تو قسمت رمز و پسورد مینویسه!! :(
:(
:(
:(

MMSHFE
سه شنبه 23 مهر 1392, 10:20 صبح
میگم Saved Passwords مرورگر رو چک کنید. شاید نام کاربری و رمز عبور شما Save شده. اگه از اون نبود، Cookieها رو پاک کنید ببینید درست میشه یا نه. تجربه نشون داده خیلی وقتها مشکل از کد نیست.

RIG000
سه شنبه 23 مهر 1392, 10:20 صبح
مشکل فقط اینه که این قسمت واسه چی نباید مقدار USER رو بگیره ... واسه چی این کار نمیکنه!؟؟

@if( Request.IsAuthenticated) {
@:<p>Welcome,@User.Identity.Name</p>

RIG000
سه شنبه 23 مهر 1392, 10:25 صبح
میگم Saved Passwords مرورگر رو چک کنید. شاید نام کاربری و رمز عبور شما Save شده. اگه از اون نبود، Cookieها رو پاک کنید ببینید درست میشه یا نه. تجربه نشون داده خیلی وقتها مشکل از کد نیست.
اره SAVE هست .. حالا این رو میگم بخاطر این که به عنوان لوکال هاست میخونه ...
موندم چرا این کار نمیکنه؟
@if( Request.IsAuthenticated)
دلیل کار نکردن این دستور چی میتونه باشه؟

RIG000
سه شنبه 23 مهر 1392, 10:54 صبح
از کوکی ها هم نبود!! موندم چیکار کنم!!

مهدی هادیان2
سه شنبه 23 مهر 1392, 11:16 صبح
بسم الله الرحمن الرحیم
با سلام
لطفا یه نگاهی به لینک های زیر بکنید؛ ان شاالله که مسئله تون مرتفع بشه.
http://weblogs.asp.net/jgalloway/archive/2012/08/29/simplemembership-membership-providers-universal-providers-and-the-new-asp-net-4-5-web-forms-and-asp-net-mvc-4-templates.aspx
http://blog.longle.net/tag/simplemembership/
www.dotnettips.info/post/1248/استفاده-از-membershipprovider-و-roleprovider-در-windows-application
یکی از کامنت های www.dotnettips.info/post/822/asp-net-mvc-18
http://www.dotnettips.info/post/1409/best-practice-%DB%8C-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%AA%D8%A3%DB%8C%DB%8C%D8%AF-%D8%A7%D8%B9%D8%AA%D8%A8%D8%A7%D8%B1-%DA%A9%D8%B1%D8%AF%D9%86-%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1%D8%A7%D9%86-%D8%AF%D8%B1-asp-net-mvc-4
موفق باشید.

RIG000
سه شنبه 23 مهر 1392, 11:52 صبح
ممنون .اخه مشکل اینه که کد ها من درست هست ...
اما چرا جواب نمیده!!!

star_rh
سه شنبه 23 مهر 1392, 12:09 عصر
تو فرم لاگین (()using (Html.BeginForm@ رو نوشتی یا نه؟ تو این کدی که دادی نیست؟
اگه نوشتی چک کن ببین مقادیر به درستی به سرور ارسال می شه. یعنی مقادیر خالی نباشند.
HttpPost رو هم چک کن

RIG000
سه شنبه 23 مهر 1392, 12:12 عصر
تو وب کانفیگ چیزی باید تنظیم باشه؟؟

RIG000
سه شنبه 23 مهر 1392, 12:14 عصر
لاگینم >

@model Toranj_Co.Models.SetLogin

@{
ViewBag.Title = "login";
Layout = "~/Views/Shared/UserLayout.cshtml";
}

@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<div class="editor-label">
<b> @Html.Label("نام کاربری")</b>
</div>
<div class="editor-field">
@Html.TextBoxFor(model => model.UserName)
@*@Html.ValidationMessageFor(model => model.UserName)*@
</div>
<div class="editor-label">
<b> @Html.Label("رمز ورود")</b>
</div>
<div class="editor-field">
@Html.PasswordFor(model => model.Password)
@*@Html.ValidationMessageFor(model => model.Password)*@
</div>
<div class="editor-label">
<b> @Html.Label("رمز ورود")</b>
</div>
<div class="editor-field">
@Html.CheckBoxFor(model => model.RememberMe)
@Html.Label("مرا به خاطر بسپار")
@*@Html.ValidationMessageFor(model => model.Password)*@
</div>
<p>
<input type="submit" value="ورود" />
</p>
}
<div>
@Html.ActionLink("بازگشت/انصراف ", "Index")
</div>

RIG000
سه شنبه 23 مهر 1392, 13:05 عصر
breackpoint کردم ...
تو لاگین مقدار هارو میفرسته ...
اما تو home که برمیگرده (Request.IsAuthenticated) رو false زده و @User.Identity.Name رو هم = ""

RIG000
سه شنبه 23 مهر 1392, 13:10 عصر
من نفهمیدم این @User.Identity.Name مقدار رو اخر از کجا داره میگیره ؟؟؟

RIG000
سه شنبه 23 مهر 1392, 13:24 عصر
111893 این عکس از بریک پوینت

RIG000
سه شنبه 23 مهر 1392, 14:50 عصر
هنوز نتونستم حلش کنم.....

star_rh
سه شنبه 23 مهر 1392, 15:25 عصر
این نمونه کدیه با MemberShip
AccountModel.cs

public class LogOnModel
{
[Required]
[Display(Name = "User name")]
public string UserName { get; set; }

[Required]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }

[Display(Name = "Remember me?")]
public bool RememberMe { get; set; }
}

Account.cs

[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
if (ModelState.IsValid)
{
if (Membership.ValidateUser(model.UserName, model.Password))
{
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
&& !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction("Index", "Home");
}
}
else
{
ModelState.AddModelError("", "The user name or password provided is incorrect.");
}
}

// If we got this far, something failed, redisplay form
return View(model);
}

_LogOnPartial.cshtml

@if(Request.IsAuthenticated) {
<text>Welcome <strong>@User.Identity.Name</strong>!
[ @Html.ActionLink("خروج", "LogOff", "Accounts") ]</text>
}
else {
@:[ @Html.ActionLink("ورود", "LogOn", "Accounts") ]
}

RIG000
سه شنبه 23 مهر 1392, 16:41 عصر
الان تو لوگ آن چه جوری چک میکنی تو دیتابیس این طرف ثبت شده؟؟؟؟؟
وبخای با سلکت واکشیش کنی؟

RIG000
سه شنبه 23 مهر 1392, 16:48 عصر
آقای
star_rh (http://barnamenevis.org/member.php?155448-star_rh)
http://barnamenevis.org/images/statusicon/user-offline.png میشه یه نمونه ضمیمه کنید؟
خیلی از وقت من رو این مورد گرفته ...

star_rh
سه شنبه 23 مهر 1392, 17:57 عصر
Membership.ValidateUser کاربر رو بررسی می کنه ببینه تو دیتابیس هست یا نه.
این نمونه رو ببین
http://www.codeproject.com/Articles/30514/Custom-membership-provider-for-the-ADO-NET-Entity

RIG000
سه شنبه 23 مهر 1392, 18:13 عصر
خیلی خستم کرده...
حالا اصلا میشه اط این طریق userid طرف رو هم در اورد چون واسه خرید باید یوزر ای دی طرف رو داشته باشم تا بدونم کی چی خریده کی چی نخریده ...

RIG000
سه شنبه 23 مهر 1392, 18:17 عصر
کلی ارور داره!!!:(
اگه تونستی یه نمونه خودت بذاره... اون کدهایی که زده بودم درست بود. نمیدونم چرا کار نمی کرد!!:(

zahra6688
چهارشنبه 24 مهر 1392, 22:54 عصر
اینکه یوزر و پسورد در فرم لاگین نگهداری می شوند به خاطر تنطیمات browser است که مقدار فیلدها را نگهداری می کند مثلا اگر از chrome استفاده کنید اگر در تنظیمات گزینه ی Enable Autofill to fill out web forms in a single click تیک خورده باشد، فیلدها به صورت پر شده نمایش داده می شوند. اگر کوکی را پاک کنید اینها هم خالی میشوند و این موضوع اصلا بد و ناراحت کننده نیست.
همچنین User در شئ HttpContext قرار دارد و یوزر کنونی را بر می گرداند.
در پروژه ای که ایجاد کردید، اگر در فولدر Filter کلاس InitializeSimpleMembershipAttribute را بررسی کنید، میبینید که برنامه بررسی می کند اگر دیتا بیسی وجود نداشته باشد، آن را ایجاد می کند.
اگر ممکن است یک sample از پروژه تان را که کار نمی کند را در اینجا قرار دهید.
اگر نیاز به اطلاعات بیشتر دارید در مورد انواع membership در Asp.Net مطالعه کنید.

RIG000
شنبه 27 مهر 1392, 08:39 صبح
اینکه یوزر و پسورد در فرم لاگین نگهداری می شوند به خاطر تنطیمات browser است که مقدار فیلدها را نگهداری می کند مثلا اگر از chrome استفاده کنید اگر در تنظیمات گزینه ی Enable Autofill to fill out web forms in a single click تیک خورده باشد، فیلدها به صورت پر شده نمایش داده می شوند. اگر کوکی را پاک کنید اینها هم خالی میشوند و این موضوع اصلا بد و ناراحت کننده نیست.
همچنین User در شئ HttpContext قرار دارد و یوزر کنونی را بر می گرداند.
در پروژه ای که ایجاد کردید، اگر در فولدر Filter کلاس InitializeSimpleMembershipAttribute را بررسی کنید، میبینید که برنامه بررسی می کند اگر دیتا بیسی وجود نداشته باشد، آن را ایجاد می کند.
اگر ممکن است یک sample از پروژه تان را که کار نمی کند را در اینجا قرار دهید.
اگر نیاز به اطلاعات بیشتر دارید در مورد انواع membership در Asp.Net مطالعه کنید.
میخام زیپ کنم فایل رو این ارور رو میده
file not found or no read permissions' (http://stackoverflow.com/questions/14699767/copy-folder-contents-to-a-created-zip-file-file-not-found-or-no-read-permissi)

RIG000
شنبه 27 مهر 1392, 09:36 صبح
این نمونه ..
با vs2012 و sql server2012 کار میکنم .
این فایل رو هم با 7-zip ارشیو کردم ..
ویو mainlayout چک کردن یوزر وارد شده رو بر عهده داره ...
بالا دست چپ رو ورود کلیلک کنید و برید لاگین کنید و دوباره برمیگرده به این صفحه اما یوزر رو نمیشناسه .
!! قبلش هم یه ثبت انجام بدید ...
یا واسه لاگین یوزر رو capita و پسورد رو 987654
تو سایت برنامه اپلود نشد اینجا اپلود کردم. لطفا بررسی کنید
http://www.uplooder.net/cgi-bin/dl.cgi?key=c675b703c891b8bca5178573f66568e7

<a href="http://www.uplooder.net/cgi-bin/dl.cgi?key=c675b703c891b8bca5178573f66568e7" target="_blank">Toranj_Co1.7z</a>

Toranj_Co1.7z (http://www.uplooder.net/cgi-bin/dl.cgi?key=c675b703c891b8bca5178573f66568e7)

RIG000
شنبه 27 مهر 1392, 09:43 صبح
یه موضوعی هست که از اونجایی که من پروژه رو empty گرفتم .....
در پروژه ای که ایجاد کردید، اگر در فولدر Filter کلاس InitializeSimpleMembershipAttribute را بررسی کنید، میبینید که برنامه بررسی می کند اگر دیتا بیسی وجود نداشته باشد، آن را ایجاد می کند.
همچین پوشه ای ندارم.!!!
واسه همین هست که میگم ایا من باید چیزی اضافه کنم؟!!
لطفا برنامه رو ببینید..

RIG000
شنبه 27 مهر 1392, 11:15 صبح
<authentication mode="Forms">
<forms loginUrl="~/Home/Login" timeout="2880" />
</authentication>
حل شد ....
همین رو فقط باید تو webconfig اضافه میکردم .... که نکرده بودم....
از
zahra6688 (http://barnamenevis.org/member.php?41469-zahra6688)
http://barnamenevis.org/images/statusicon/user-offline.png
و
star_rh (http://barnamenevis.org/member.php?155448-star_rh)
http://barnamenevis.org/images/statusicon/user-offline.png
خیلی متشکرم که تا اینجا همراهیم کردن.

RIG000
شنبه 27 مهر 1392, 13:50 عصر
فقط من وقتی لاگین میکنم و تیک remembr رو نمی زنم .. وارد میشم و یک بار برنامه رو میبندم و دوباره باز میکنم میبینم که با اون اسمی که لاگین کردم تو سایت هست!!! یعنی تو حالت remeber me هست . در صورتی که من تیکش رو نزدم!! چرا؟

FormsAuthentication.SetAuthCookie(user.UserName,us er.RememberMe);

مهدی هادیان2
یک شنبه 28 مهر 1392, 13:57 عصر
بسم الله الرحمن الرحیم
با سلام
به عقیده بنده یک پروژه دیگر از نوع internet درست کنید و کدهایی که برای لاگین کردن احتیاج دارید از اون کپی پیست کنید تا ان شاالله دچار مشکل نشید.
موفق باشید.

RIG000
یک شنبه 28 مهر 1392, 18:11 عصر
نه نمیخام با اینترنت اپلیکشن جلو برم...
دیگه شروع کردم... میخام بدونم تو کد هام چه خبر هست. پروژه فعلا به خوبی داره پیش میره .. ولی سوال بالایی رو موندم که چه جوری به مشکل میخوره ؟