PDA

View Full Version : پسورد دستی در Membership



Ali_M.Eghbaldar
پنج شنبه 31 تیر 1389, 17:30 عصر
سلام به همه
می خواستم راه بدست آوردن پسورد کاربر بدون استفاده از RecoveryPassword
یعنی با کد بدونم

لینک های زیر هم بررسی کرددم ولی بازم خطا دارم

http://stackoverflow.com/questions/2677527/membership-change-password
http://barnamenevis.org/forum/showthread.php?p=1003257
http://peterkellner.net/2007/02/15/resetpasswordaspnet/


:My Code





Dim m As MembershipUser
m = Membership.GetUser("username")
m.ChangePassword(m.ResetPassword(), Pass.Text)
Membership.UpdateUser(m)






Web.Config




<!--::::::::::::::: Roles ????? ?? :::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::-->
<roleManager enabled="true" />
<!--::::::::::::::: Roles ????? ?? :::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::-->

<anonymousIdentification enabled="true"/>
<membership>
<providers>
<clear/>
<add name="AspNetSqlMembershipProvider"
connectionStringName="LocalSQLServer"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="true"
applicationName="/SamplesRolesApp"
requiresUniqueEmail="true"
passwordFormat="Hashed"
maxInvalidPasswordAttempts="5"
minRequiredPasswordLength="5"
minRequiredNonalphanumericCharacters="0"
passwordAttemptWindow="10"
passwordStrengthRegularExpression=""
type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</membership>
<!--::::::::::::::: Membership ????? ?? :::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::::::-->


خطای زیرو میده: :افسرده:



The provider user key supplied is invalid. It must be of type System.Guid.
Parameter name: providerUserKey

Ali_M.Eghbaldar
پنج شنبه 31 تیر 1389, 18:56 عصر
این کارم خیلی فوریه
از دوستان کسی میتونه کمک کنه؟

Alireza_Salehi
پنج شنبه 31 تیر 1389, 19:00 عصر
اینو اشتباه زدی، با فرمت GUID تناسب نداره:

PublicKeyToken=b03f5f7f11d50a3a

Ali_M.Eghbaldar
پنج شنبه 31 تیر 1389, 19:22 عصر
صحیحشو از کجا پیدا کنم؟

Alireza_Salehi
پنج شنبه 31 تیر 1389, 20:31 عصر
مجبور نیستی کامل بزنی، این جور هم جواب میده:
http://msdn.microsoft.com/en-us/library/6e9y4s5t.aspx

Ali_M.Eghbaldar
جمعه 01 مرداد 1389, 11:52 صبح
دوستان مشکل حل نشد
لطفا لینک نذارید یکی یه زحمت بکشه کد منو تست کنه تمام کارام خوابیده . شرمنده :افسرده:

Alireza_Salehi
جمعه 01 مرداد 1389, 14:20 عصر
از روی همون لینکه کپی کن درست میشه...

Ali_M.Eghbaldar
جمعه 01 مرداد 1389, 14:38 عصر
خیلی ممنون Alireza_Salehi (http://www.barnamenevis.org/forum/member.php?u=33355) جان که جواب میدی
کپی کردن خطای زیرو داد

Line 43: <add
Line 44: name="SqlProvider"
Line 45: type="System.Web.Security.SqlMembershipProvider"
Line 46: connectionStringName="MySqlConnection"
Line 47: applicationName="MyApplication"

اگه لازمه کل config بزارم

Peyman.Gh
جمعه 01 مرداد 1389, 14:45 عصر
در WEB.CONFIG
requiresQuestionAndAnswer را برابر با False قرار دهید.
<membership>
<providers>
<remove name="AspNetSqlMembershipProvider" />
<add name="AspNetSqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="LocalSqlServer"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="True"
applicationName="/"
requiresUniqueEmail="True"
passwordFormat="Hashed"
maxInvalidPasswordAttempts="5"
minRequiredPasswordLength="1"
minRequiredNonalphanumericCharacters="0"
passwordAttemptWindow="10"
passwordStrengthRegularExpression="" />
</providers>
</membership>

protected void Button1_Click(object sender, EventArgs e)
{
MembershipUser i ;
i = Membership.GetUser(string username);
i.ChangePassword(i.ResetPassword(),string newPassword);
Membership.UpdateUser(i);
}

من امتحان کردم و درست کار کرد.

Ali_M.Eghbaldar
جمعه 01 مرداد 1389, 15:56 عصر
پیمان جان دستت درد نکنه مشکل حل شد
مثالشو میزارم تا کسی به مشکل من بر خورد استفاده کنه !!!

بازم مشکلی بود شخصا در خدمتم :لبخند:
سایت آپلود نمی کنه در اولین فرصت میزارم

vba_hadi
پنج شنبه 14 مرداد 1389, 17:18 عصر
سلام دوستان.
در نظر بگیرید کاربری رمزش رو فراموش کرده، با پاسخ به سوال امنیتی سیستم بطور خودکار رمزی را واسش در نظر میگیره. حالا کاربر میخواد اون رمز را که سیستم بهش داده را عوض کنه که موقع ResetPassword کردن پیغام Value cannot be null.
Parameter name: passwordAnswer ظاهر میشه
خوب این به دلیل اینه که در وب کانفیگ requiresQuestionAndAnswer به True ست شده. که اگه false بشه مشکل حله یعنی کاربر رمزشو عوض میکنه. ولی در صورت false بودن هر کاربری میتونه رمز کاربر دیگرو عوض کنه پس یکی از بهترین حالات پرسش سوال امنیتی توسط سیستم میباشد.
برای حل مشکل پیغام فوق در web.config کد زیر را ست کنید:


<membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="1">
<providers>
<clear/>
<add name="SqlProvider"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="LocalSqlServer"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="True"
requiresUniqueEmail="true"
passwordFormat="Hashed"
applicationName="/" />
</providers>
</membership>

حال کد تغییر رمز را اینگونه بنویسید:


MembershipUser user = Membership.GetUser(HttpContext.Current.User.Identi ty.Name);
string newPassword = txtPass1.Text;
string tempPassword = string.Empty; //user.ResetPassword();
if (Membership.Provider.RequiresQuestionAndAnswer)
{
var _requriresQA = Membership.Provider.GetType().GetField("_RequiresQuestionAndAnswer",
System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
_requriresQA.SetValue(Membership.Provider, false);
tempPassword = user.ResetPassword();
_requriresQA.SetValue(Membership.Provider, true);
}
else
tempPassword = user.ResetPassword();
user.ChangePassword(tempPassword, newPassword);

در اینصورت موقع ResetPassword کردن پیغام خطا ظاهر نمیشود.
امیدوارم مفید بوده باشه