PDA

View Full Version : سوال: کمک در خصوص برخی از ابهامات کد زیر برای Login (احراز هویت)



sahel65
سه شنبه 30 خرداد 1391, 19:52 عصر
سلام خدمت دوستان؛
چون به یک صفحه جهت ورود و مشاهده مشخصات کاربر نیاز داشتم و میخواستم اصولی هم باشه، تو یکی از search ها به این صفحه برخوردم:

http://bytes.com/topic/net/answers/736931-how-display-user-name-after-login-page-using-c

از کدش خوشم اومد ولی چون حرفه ای نیستم، نتونستم همه قسمتهاش رو متوجه بشم؛ جاهایی رو که متوجه شدم خدمت شما میگم و بقیه رو ازتون درخواست می کنم اگه می دونید راهنماییم کنید تا مثل همین صفحه ایجاد و درست کنم.
ملاحظه کنید؛ این کد Html یا همون صفحه وارد کردن user و password هستش:



<HEAD>
<title>Login</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#‎‎">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<table id="mainTable" border="0" style="Z-INDEX: 103; LEFT: 544px; WIDTH: 264px; POSITION: absolute; TOP: 96px; HEIGHT: 296px">
<TBODY>
<tr>
<td>
<table class="t_border" id="loginTable" cellspacing="15" cellpadding="0">
<tr>
<td align="center" colspan="2"><b>USER LOGIN</b></td>
</tr>
<tr>
<td><b>Login: </b>
</td>
<td><asp:textbox id="txtUserName" runat="server" width="128px" BackColor="LightGray" Font-Bold="True"></asp:textbox><asp:requiredfieldvalidator id="rvUserValidator" runat="server" controltovalidate="txtUserName" errormessage="You Must Enter a EmployeeId!"
display="None">*</asp:requiredfieldvalidator></td>
</tr>
<tr>
<td style="HEIGHT: 23px"><b>Password: </b>
</td>
<td style="HEIGHT: 23px"><asp:textbox id="txtPassword" runat="server" width="128px" textmode="Password" BackColor="LightGray"
Font-Bold="True"></asp:textbox><asp:requiredfieldvalidator id="rvPasswordValidator" runat="server" controltovalidate="txtPassword" errormessage="Empty Passwords not accepted"
display="None">*</asp:requiredfieldvalidator></td>
</tr>
<tr>
<td align="center" colspan="2"><asp:button id="cmdSubmit" runat="server" text="Submit" borderstyle="Solid" Font-Bold="True"></asp:button></td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<table id="messageDisplay">
<tr>
<td><asp:validationsummary id="Validationsummary1" runat="server" width="248px" displaymode="BulletList" Height="40px"></asp:validationsummary></td>
</tr>
</table>
</td>
</tr>
</TBODY>
</table>
</form>
<asp:label id="lblMessage2" runat="server" width="264px" font-bold="True" font-italic="True"
font-size="Medium" forecolor="#C00000" style="Z-INDEX: 101; LEFT: 544px; POSITION: absolute; TOP: 432px"></asp:label>
<asp:label id="lblMessage" runat="server" width="264px" font-bold="True" font-italic="True"
font-size="Medium" forecolor="#C00000" style="Z-INDEX: 102; LEFT: 544px; POSITION: absolute; TOP: 400px"></asp:label></TR></TBODY></TABLE>
</body>

و اینهم کد مربوط به بررسی و اتصال به بانک:


private void cmdSubmit_Click(object sender, System.EventArgs e)
{
if (Page.IsValid)
{
if (DBConnection(txtUserName.Text.Trim(), txtPassword.Text.Trim()))
{
FormsAuthentication.RedirectFromLoginPage (txtUserName.Text, false);
Response.Redirect ("Success.aspx");
}
else
{
lblMessage.Text = "Invalid Login, please try again!";
}
}

}
private bool DBConnection(string txtUser, string txtPass)
{

SqlConnection myConn = new SqlConnection(ConfigurationSettings.AppSettings["strConn"]);
SqlCommand myCmd = new SqlCommand("ValidateUser", myConn);
myCmd.CommandType = CommandType.StoredProcedure;

SqlParameter objParam1;
SqlParameter objParam2;
SqlParameter returnParam;

objParam1 = myCmd.Parameters.Add ("@EmployeeNumber", SqlDbType.VarChar);
objParam2 = myCmd.Parameters.Add ("@EMPPassword", SqlDbType.VarChar);
returnParam = myCmd.Parameters.Add ("@Num_of_User", SqlDbType.Int);

objParam1.Direction = ParameterDirection.Input;
objParam2.Direction = ParameterDirection.Input;
returnParam.Direction = ParameterDirection.ReturnValue;

objParam1.Value = txtUser;
objParam2.Value = txtPass;

try
{
if (myConn.State.Equals(ConnectionState.Closed))
{
myConn.Open();
myCmd.ExecuteNonQuery();
}
if ((int)returnParam.Value < 1)
{
lblMessage.Text = "Invalid Login!";
return false;
}
else
{
myConn.Close();
return true;
}
}
catch (Exception ex)
{

lblMessage2.Text = ex + "Error Connecting to the database";
return false;
}

}



توضیحات:
چند سوال برام ایجاد شده که نتونستم برنامه رو بازنویسیش کنم:

1- مورد اول خطا مربوط به خط 1 بود که با تغییر private به public درست شد.

2- خطوط 3 تا 15 رو امکانش هست یه توضیحی بدید؟

3- در خط 20 رشته اتصال رو باید در Webconfig ایجاد کرده و اسمش رو تو اینجا وارد کنیم، این مورد درسته دیگه!

4- در خط 21 اشاره به یک Stored procedure داره دیگه درسته؟ اگه جواب مثبته توی SP چی باید بنویسیم که کدمون به درستی کار کنه؟

می بخشید اگه سوالاتم زیاد شد.:خجالت::خجالت::خجالت::خجال ت:

mohsen_f_b
سه شنبه 30 خرداد 1391, 22:20 عصر
سلام دوست عزیز


1- مورد اول خطا مربوط به خط 1 بود که با تغییر private به public درست شد.دوست عزیز شما از protected استفاده کنید بدلیل اینکه یک Evant هتش که این Evant برای رخداد Click دکمه cmdSubmit داره نوشته میشه!


2- خطوط 3 تا 15 رو امکانش هست یه توضیحی بدید؟نام کاربری و رمز عبور رو میگیره از کاربر و به تابع DBConnection ارسال می کنه در صورت درست بودن نام کاربری و کلمه عبور به صفحه Success.aspx میره کاربر د غیر اینصورت پیغام خطا را نمایش میده.


3- در خط 20 رشته اتصال رو باید در Webconfig ایجاد کرده و اسمش رو تو اینجا وارد کنیم، این مورد درسته دیگه!بله درسته


4- در خط 21 اشاره به یک Stored procedure داره دیگه درسته؟ اگه جواب مثبته توی SP چی باید بنویسیم که کدمون به درستی کار کنه؟بستگی به طراحی جدول داره.
ولی در کل در SP شما نام کاربری و رمز عبور می گیری و چک می کنی اگر وجود داشت یک خروجی بر می گردانی که کاربر بتونه وارد سامانه بشه.

موفق باشی

sahel65
چهارشنبه 31 خرداد 1391, 07:14 صبح
دوست عزیزم خیلی خیلی ممنونم از راهنمایی های شما
امکانش هست بگید تو تابع DBConnectionو پروسیجر چی بنویسم که برنامه کار کنه؟(میخوام برنامه رو اجراییش کنم)
ضمنا تو خط 7 نباید به جای true ، false قرار بگیره؟
منظورم اینجاست:

FormsAuthentication.RedirectFromLoginPage (txtUserName.Text, false);

آخه اگه true باشه باید کاربر بتونه وارد شه، در غیر اینصورت خیر؟
همچنین Trim در اینجا چه کاری انجام میده؟

txtUserName.Text.Trim()
ممنونم ازتون

sarapepors
چهارشنبه 31 خرداد 1391, 14:47 عصر
سلام .
دوست عزیز در شما باید یک استوردپروسیجر در دیتابیستون ادد کنید و چک کنید و ببینید کابری با مشخصات وارد شده در دیتابیستون وجود داره یا خیر


CREATE PROCEDURE IsMember(@Username nvarchar(50),@Password nvarchar(50))
/*
(
@parameter1 int = 5,
@parameter2 datatype OUTPUT
)
*/
AS
SELECT * FROM tblMember WHERE Username=@Username AND Password=@Password
RETURN


tblMember اسم جدولی هست که برا کاربران در نظر گرفتید.
باید اسم sp که نوشتید رو به جای validateUser بنویسید.
در مورد سوال بعدی تون که میگید باید false نوشته باشه یا true ببینید این قسمت برای اینه که سیستم کاربر رو به خاطر بسپره یا خیر اگر true باشه کاربر تا یه مدتی ( این مدت به تنظیمات مربوط به autentication بستگی داره) در سایت به صورت لاگین هست و برای ورود به سایت نیازی به لاگین مجدد نداره اگر false باشه زمانی که صفحه رو بسته در مراجعه بعدی موظفه مجددا لاگین انجام بده شما میتونید یه چک باکس بزارید تو صفحه تون و از کاربر بخواین خودش انتخاب کنه و در این قسمت به جای استفاده از true یا false از checkebox.checked استفاده کنید.

hamid_kha
چهارشنبه 31 خرداد 1391, 15:20 عصر
این قسمت از کد در واقع همون "مرا بخاطر بسپار" رو انجام میده در واقع اگر true باشه کاربر دفعه بعدی که بیاد توی سایت، سیستم میشناستش
:لبخندساده:


FormsAuthentication.RedirectFromLoginPage (txtUserName.Text, True);

و


txtUserName.Text.Trim()

اگر داخل textbox فضای خالی باشد آن فضاهای خالی را حذف میکنه

sarapepors
شنبه 03 تیر 1391, 00:23 صبح
88630
این سمپل ساده اس برا استفاده از استورد پر.سیجر و خوندن مابقی اطلاعات از دیتا بیس البته دیتابیس رو نذاشتم حجم فایل زیاد بود برش داشتم .برا احراز هویت هم از این لینک (http://barnamenevis.org/showthread.php?257287-%D8%A2%D9%85%D9%88%D8%B2%D8%B4%DB%8C-%D8%B3%D8%A7%D8%AE%D8%AA-%D9%84%D8%A7%DA%AF%DB%8C%D9%86&highlight=%D9%84%D8%A7%DA%AF%DB%8C%D9%86) استفاده کنید.