بایگانی

نوشته های برچسب زده شده ‘rolemanager’

پرسش‌های متداول درباره ASP.NET Membership

۲۱ مرداد ۱۳۸۸ ۳ دیدگاه

توضیح: این یادداشت به تدریج تکمیل و به روز خواهد شد، لطفاً اگر سوال یا ابهامی در مورد نحوه کار با ASP.NET Membership داشتید کامنت بگذارید.

اغلب کسانی به تازگی با ASP.NET آشنا می‌شوند در استفاده از امکانات membership سوالات و مشکلاتی دارند که در این نوشته به برخی از آن‌ها نگاهی می‌اندازیم.

حذف ASPNETDB
به صورت پیش فرض وقتی شما از یکی از کنترل‌های مربوط به ASP.NET Membership مثلاً CreateUserWizard استفاده می‌کنید یک دیتابیس به نام ASPNETDB در پوشه App_Data ساخته می‌شود.
اگر می‌خواهید از دیتابیسی که خودتان ساخته‌اید برای کار با ASP.NET Membership استفاده کنید باید کارهای زیر را انجام بدهید:

۱-commnad prompt ویژوال استودیو را اجرا کنید و در آن دستور aspnet_regsql را بنویسید، در پنجره‌ای که باز می‌شود دیتابیسی که می‌خواهید از membership در آن استفاده کنید را مشخص کنید تا جداول و دیگر موارد مربوط به membership به آن اضافه شود. توضیحات بیشتر…

۲-یک Connection String در web.config خودتان برای دیتابیسی که ساخته‌اید ایجاد کنید.

<connectionStrings>
   <add name="MyConnection"   
   connectionString="Your_Connection_string"
   providerName="System.Data.SqlClient" />
</connectionStrings>

3-حالا باید به اجزای مختلف ASP.NET Membership بگویید که با استفاده از connection string ای که در مرحله قبل ساختید به دیتابیس شما متصل شوند. به عنوان مثال:

<membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="20">
   <providers>
      <add name="SqlProvider"
       type="System.Web.Security.SqlMembershipProvider"
       connectionStringName="MyConnection" applicationName="/"/>
   </providers>
</membership>

این کار را می‌توانید برای دیگر اجزای membership‌ مثل rolemanager و profile هم انجام دهید.

پیدا کردن UserId

فرض کنید در وب سایت یا برنامه‌ای که در حال پیاده‌سازی آن هستید رابطه (relation) بین جداول ساخته شده توسط شما و جداول asp.net membership وجود دارد. معمولاً این رابطه با جدول aspnet_Users و با فیلد UserId است. حالا در برنامه‌تان باید به شکلی UserId را پیدا کنید. تابع زیر با گرفتن یک username به عنوان پارامتر userId آن کاربر را به شکل رشته برمی‌گرداند:

public string GetUserId(string userName)
{
  MembershipUser myObject = Membership.GetUser(userName);
  string UserID = myObject.ProviderUserKey.ToString();
  return UserID;
}

حذف Security Quesion‌ و Security Answer

حذف Security Question و Security Answer و همچنین تغییر قانون مربوط به کلمه عبور نیز از جمله سوالات متداول مربوط به ASP.NET Membership است. این کار را می‌توانید از طریق ویرایش provider ای که برای membership‌ در web.config تعریف کرده‌اید انجام دهید:

<membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="20">
 <providers>
   <add name="SqlProvider"
    type="System.Web.Security.SqlMembershipProvider"
    connectionStringName="MyConnection"
    minRequiredPasswordLength="5"
    minRequiredNonalphanumericCharacters="0"
    requiresQuestionAndAnswer="false"
    applicationName="/"/>
 </providers>
</membership>

در مثال بالا membership برای کلمات عبوری با حداقل طول ۵ کاراکتر و بدون نیاز به کاراکترهای غیرحرف و عددی و همین‌طور برای عدم استفاده از Security Question و Security Answer تنظیم شده است.

ویرایش پروفایل کاربران دیگر

ویرایش پروفایل کاربر جاری به راحتی امکان پذیر است، اما برای ویرایش پروفایل دیگر کاربران می‌توانید از تابع زیر استفاده کنید. قبل از هر چیز فرض می‌کنیم دو property تحت عنوان‌های Name و Family به پروفایل در web.config اضافه کرده‌ایم:

<profile automaticSaveEnabled="false" enabled="true">
  <properties>
    <add name="Name"/>
    <add name="Family"/>
  </properties>
</profile>

تابع زیر username کاربر را به عنوان ورودی گرفته و تغییرات داده شده روی نام و نام خانوادگی کاربر(که قبلاً در web.config تعریف شده‌اند) را در پروفایل کاربر ثبت می‌کند، شما می‌توانید این تابع را با توجه به نیاز خود و فیلدهای پروفایلی که تعریف کرده‌اید سفارشی کنید:

private void UpdateProfile(string userName)
{
   ProfileCommon userProfile = Profile.GetProfile(userName);
   userProfile.Name = txtName.Text;
   userProfile.Family = txtFamily.Text;
   userProfile.Save();
}

با استفاده از کد بالا می‌توانید یک فرم ثبت‌نام سفارشی برای خودتان بسازید که شامل نام‌ کاربری، کلمه عبور، پست الکترونیک، نام و نام خانوادگی است. اگر پنج textbox برای هریک از این فیلدها داشته باشید کد شما برای اضافه کردن یک کاربر، به همراه نام و نام خانوادگی به شکل زیر خواهد بود:

private void Register()
{
 //Add User
 MembershipUser newUser =
  Membership.CreateUser(txtUsername.Text, txtPassword.Text, txtEmail.Text);
 Membership.UpdateUser(newUser);
 //Add Name and Family
 ProfileCommon userProfile = Profile.GetProfile(txtUsername.Text);
 userProfile.Name = txtName.Text;
 userProfile.Family = txtFamily.Text;
 userProfile.Save();
}