ASP.NET পরিচয় পুনরায় সেট করুন পাসওয়ার্ড


98

নতুন এএসপি.নেট আইডেন্টিটি সিস্টেমে আমি কীভাবে কোনও ব্যবহারকারীর পাসওয়ার্ড পেতে পারি? বা বর্তমানের (ব্যবহারকারী ভুলে থাকা পাসওয়ার্ড) না জেনে কীভাবে আমি পুনরায় সেট করতে পারি?

উত্তর:


104

বর্তমান প্রকাশে

ধরে নেওয়া যায় যে আপনি ভুলে যাওয়া পাসওয়ার্ডটি পুনরায় সেট করতে অনুরোধের যাচাইকরণ পরিচালনা করেছেন, নিম্নলিখিত কোডটি একটি নমুনা কোড পদক্ষেপ হিসাবে ব্যবহার করুন।

ApplicationDbContext =new ApplicationDbContext()
String userId = "<YourLogicAssignsRequestedUserId>";
String newPassword = "<PasswordAsTypedByUser>";
ApplicationUser cUser = UserManager.FindById(userId);
String hashedNewPassword = UserManager.PasswordHasher.HashPassword(newPassword);
UserStore<ApplicationUser> store = new UserStore<ApplicationUser>();            
store.SetPasswordHashAsync(cUser, hashedNewPassword);

অ্যাসপনেট নাইটলি বিল্ডে

ফোরজিপ্যাসওয়ার্ডের মতো অনুরোধগুলি পরিচালনা করার জন্য টোকেনের সাথে কাজ করার জন্য ফ্রেমওয়ার্কটি আপডেট করা হয়েছে। মুক্তির পরে, সহজ কোড নির্দেশিকা প্রত্যাশিত।

হালনাগাদ:

এই আপডেটটি আরও পরিষ্কার পদক্ষেপ সরবরাহ করার জন্য।

ApplicationDbContext context = new ApplicationDbContext();
UserStore<ApplicationUser> store = new UserStore<ApplicationUser>(context);
UserManager<ApplicationUser> UserManager = new UserManager<ApplicationUser>(store);
String userId = User.Identity.GetUserId();//"<YourLogicAssignsRequestedUserId>";
String newPassword = "test@123"; //"<PasswordAsTypedByUser>";
String hashedNewPassword = UserManager.PasswordHasher.HashPassword(newPassword);                    
ApplicationUser cUser = await store.FindByIdAsync(userId);
await store.SetPasswordHashAsync(cUser, hashedNewPassword);
await store.UpdateAsync(cUser);

আপনি কি জানেন যে সংস্করণ 1.1 প্রকাশিত হবে?
গ্র্যাক্রো

এটি এখনও আলফায় রয়েছে এবং 1.0 সবেমাত্র প্রকাশিত হয়েছে। সুতরাং অনেক মাস ধরে। myget.org/gallery/aspnetwebstacknightly
jd4u

11
অদ্ভুতভাবে স্টোর.সেটপ্যাসওয়ার্ডহ্যাশএেন্সেক (সিউজার, হ্যাশডিউপ্যাসওয়ার্ড) পদ্ধতি কলটি আমার পক্ষে কাজ করে নি, পরিবর্তে আমাকে নিজেই সিউজার সেট করতে হয়েছিল assপ্যাসওয়ার্ডহ্যাশ = হ্যাশডিউপ্যাসওয়ার্ড এবং তারপরে ইউজারম্যানেজার.উপডেটএ্যাসেন্স (ব্যবহারকারী) কল করতে হবে;
অ্যান্ডি মেহালিক 26:25 এ 13:25

4
কোডটি কাজ করছে না কেবল তখনই সম্ভব যখন ব্যবহারকারীর পুনরুদ্ধার প্রসঙ্গে এবং স্টোর প্রসঙ্গটি পৃথক হয়। কোডটি কেবলমাত্র একটি নমুনা পদক্ষেপ ছিল, সঠিক নয়। অন্যদের জন্য এই সমস্যাটি এড়াতে খুব শীঘ্রই উত্তর আপডেট করবে।
jd4u

4
ফ্রেমওয়ার্ক 1 সরবরাহ করে না। তবে ফ্রেমওয়ার্ক 2-আলফায় কয়েকটি বৈশিষ্ট্য রয়েছে যা পাসওয়ার্ড পুনরায় সেট করার অনুরোধগুলি পরিচালনা করার জন্য সহজ প্রক্রিয়া সরবরাহ করতে পারে। aspnetidentity.codeplex.com
jd4u

141

বা বর্তমানের (ব্যবহারকারী ভুলে থাকা পাসওয়ার্ড) না জেনে কীভাবে আমি পুনরায় সেট করতে পারি?

আপনি যদি ব্যবহারকারীম্যানেজার ব্যবহার করে কোনও পাসওয়ার্ড পরিবর্তন করতে চান তবে আপনি ব্যবহারকারীর বর্তমান পাসওয়ার্ড সরবরাহ করতে চান না, আপনি একটি পাসওয়ার্ড পুনরায় সেট করার টোকেন তৈরি করতে পারেন এবং তারপরে তত্ক্ষণাত ব্যবহার করতে পারেন।

string resetToken = await UserManager.GeneratePasswordResetTokenAsync(model.Id);
IdentityResult passwordChangeResult = await UserManager.ResetPasswordAsync(model.Id, resetToken, model.NewPassword);

8
এটি এখন পর্যন্ত একটি নতুন পাসওয়ার্ড সেট করার সর্বোত্তম এবং পরিষ্কার উপায়। গৃহীত উত্তরের সমস্যাটি হ'ল এটি সরাসরি পাসওয়ার্ড হ্যাশারে অ্যাক্সেসের মাধ্যমে পাসওয়ার্ড জটিলতার বৈধতাগুলিকে বাইপাস করে।
ক্রিস

6
Fyi, আপনি ত্রুটি পেতে পারেন 'কোনও IUserTokenProvider নিবন্ধিত নেই।' যদি আপনি উপরের যুক্তি ব্যবহার করতে পারেন। এই স্ট্যাকওভারফ্লো . com/ প্রশ্নগুলি / 22629936/… দেখুন ।
প্রসাদ কানাপার্থী

4
এটি মাইক্রোসফ্টের জন্য কাজ করে spএএসপনেট.ইডেন্টিটি কেবলমাত্র 2 সংস্করণে, আমি মনে করি। আপনি জেনারেট
পাসওয়ার্ডসেটসেটটোকেনএন্সিঙ্ক

আপনার উত্তর করার জন্য আপনাকে ধন্যবাদ। এটি আমার জন্য কবজির মতো কাজ করে।
থমাস.বেঞ্জ

4
আপনি যদি অবৈধ টোকেন পেয়ে থাকেন তবে নিশ্চিত হয়ে SecurityStampনিন যে আপনার ব্যবহারকারীর পক্ষে নাল নয়। অন্যান্য ডেটাবেস থেকে স্থানান্তরিত ব্যবহারকারীদের, বা UserManager.CreateAsync()পদ্ধতিগুলির মাধ্যমে তৈরি করা হয়নি এমন ব্যবহারকারীদের ক্ষেত্রে এটি ঘটতে পারে ।
অ্যালিসন

70

অবমানিত

এটি ছিল আসল উত্তর। এটি কাজ করে তবে সমস্যা আছে has AddPasswordব্যর্থ হলে কী হবে ? ব্যবহারকারীর পাসওয়ার্ড ছাড়াই বাকি রয়েছে।

আসল উত্তর: আমরা তিন লাইন কোড ব্যবহার করতে পারি:

UserManager<IdentityUser> userManager = 
    new UserManager<IdentityUser>(new UserStore<IdentityUser>());

userManager.RemovePassword(userId);

userManager.AddPassword(userId, newPassword);

আরও দেখুন: http://msdn.microsoft.com/en-us/library/dn457095(v=vs.111).aspx

এখন প্রস্তাবিত

এডওয়ার্ড্রে প্রস্তাবিত উত্তরটি ব্যবহার করা আরও ভাল এবং পরে ড্যানিয়েল রাইট পরে একটি কোডের নমুনা দিয়ে ব্যাখ্যা করেছিলেন।


4
এর জন্য Thankশ্বরকে ধন্যবাদ, আমি ভেবেছিলাম যে এটি না দেখা পর্যন্ত আমাকে একটি নতুন ব্যবহারকারী দোকান তৈরি করতে হবে!
লুক

এসকিউএল এ সরাসরি করার কোন উপায় আছে কি? আমি আমার ডিবিএকে এক্সিকিউটেবলের পরিবর্তে প্রয়োজনে কল করতে একটি স্প্রোক দিয়ে দিতে পছন্দ করি।
মার্ক রিচম্যান

@ মার্করিচম্যান এটি একটি নতুন প্রশ্ন। আপনি যা করতে পারেন তা হ'ল এসকিউএল সার্ভারে চালিত উত্পন্ন টি-এসকিউএল পরীক্ষা করা।
শন লুটিন

4
এটি দিয়ে নজর রাখুন, যখনই অ্যাডপ্যাসওয়ার্ড ব্যর্থ হয় (অর্থাত্ অপ্রতুল পাসওয়ার্ড জটিলতা), ব্যবহারকারীকে পাসওয়ার্ড ছাড়াই ছেড়ে দেওয়া হবে।
ক্রিস

4
কোনও ব্যবসায়ের নিয়মকে বাইপাস না করেই সবচেয়ে পরিষ্কার পদ্ধতির (কারণ আপনি যখন পাসওয়ার্ড হ্যাশারে সরাসরি প্রবেশ করেন তখন কোনও পাসওয়ার্ড জটিলতার বৈধতা থাকে না) ড্যানিয়েল রাইট প্রস্তাবিত proposed
ক্রিস

29

আপনার UserManager, প্রথমে জেনারেটপ্যাসওয়ার্ডসেটসটোকেনএন্সিঙ্ক কল করুন । একবার ব্যবহারকারী তার পরিচয় যাচাই করে নিলেন (উদাহরণস্বরূপ কোনও ইমেলটিতে টোকেন গ্রহণ করে), টোকনটি রিসেটপ্যাসওয়ার্ডএেন্সিকে পাস করুন ।


4
কেন রিসেটপ্যাসওয়ার্ডএন্সিঙ্কের জন্য একটি ইউজার আইডি দরকার এবং এটি যখন তারা টোকেন দিয়ে দেখায় তখন ব্যবহারকারীদের কাছ থেকে এটি পাওয়ার জন্য যুক্তিসঙ্গত উপায় প্রয়োজন তা বোঝার চেষ্টা করছেন। জেনারেটপ্যাসওয়ার্ডসেটটি এমন একটি টোকেন ব্যবহার করে যা ১৫০ টিরও বেশি অক্ষরের বেশি ... মনে হয় ক্রিপ্টোগ্রাফিকভাবে কোনও ইউজার আইডি স্টো করার পক্ষে যথেষ্ট তাই আমার নিজের এটি প্রয়োগ করতে হবে না। :(
পেটিস

আমি ধরে নিলাম এটি ব্যবহারকারীর আইডি চাইছে যাতে এটি ব্যবহারকারীর আইডির বিপরীতে আইডেন্টিটি ডেটাবেজে রিসেট টোকেনটি প্রবেশ করতে পারে। যদি এটি এটি না করে তবে টোকেনটি বৈধ ছিল কিনা তা ফ্রেমওয়ার্ক কীভাবে জানতে পারে। ইউজার.আইডেন্টিটি.গেট ইউজারআইডি () বা অন্যান্য জাতীয় ব্যবহার করে আপনার ব্যবহারকারীর আইডি টানতে সক্ষম হওয়া উচিত।
রায়ান বুডিকোম

4
ইউজার আইডি প্রয়োজন হয় API এর অংশে একটি নির্বোধ পছন্দ, যখনই রিসেটপ্যাসওয়ার্ড (অ্যাসিঙ্ক) কল করা হয় তখন টোকেনটি ইতিমধ্যে ডেটাবেজে থাকে এবং ইনপুটটির বিপরীতে এটি বৈধতা দেওয়ার জন্য যথেষ্ট হওয়া উচিত।
ফিলিপ

@ ফিলিপ, ResetPasswordAsyncব্যবহারকারীর আইডি নেওয়ার সুবিধাটি হ'ল পরিচয় প্রদানকারীকে কেবল ব্যবহারকারী আইডি সূচী করতে হবে, টোকেনগুলিও নয়। যদি অনেক ব্যবহারকারী থাকে তবে এটি এটি আরও ভাল স্কেল করতে দেয়।
এডওয়ার্ড ব্রে

4
অ্যাডওয়ার্ড ব্রে ভাল, আপনি রিসেট কলটির জন্য কীভাবে ব্যবহারকারী আইডি আনবেন?
ফিলিপ

2
string message = null;
//reset the password
var result = await IdentityManager.Passwords.ResetPasswordAsync(model.Token, model.Password);
if (result.Success)
{
    message = "The password has been reset.";
    return RedirectToAction("PasswordResetCompleted", new { message = message });
}
else
{
    AddErrors(result);
}

কোডের এই স্নিপেটটি গিথুবে উপলব্ধ এস্পনেটআইডেন্টিটি নমুনা প্রকল্পের বাইরে নেওয়া হয়েছে


2

পদ্ধতি তৈরি করুন UserManager<TUser, TKey>

public Task<IdentityResult> ChangePassword(int userId, string newPassword)
{
     var user = Users.FirstOrDefault(u => u.Id == userId);
     if (user == null)
          return new Task<IdentityResult>(() => IdentityResult.Failed());

     var store = Store as IUserPasswordStore<User, int>;
     return base.UpdatePassword(store, user, newPassword);
}

2

Asp.Net কোর পরিচয় ব্যবহারের জন্য পাসওয়ার্ড পুনরায় সেট করার সেরা উপায় ওয়েব API এর জন্য।

দ্রষ্টব্য * : ত্রুটি () এবং ফলাফল () অভ্যন্তরীণ ব্যবহারের জন্য তৈরি করা হয়েছে। আপনি চান ফিরে আসতে পারেন।

        [HttpPost]
        [Route("reset-password")]
        public async Task<IActionResult> ResetPassword(ResetPasswordModel model)
        {
            if (!ModelState.IsValid)
                return BadRequest(ModelState);
            try
            {
                if (model is null)
                    return Error("No data found!");


                var user = await _userManager.FindByIdAsync(AppCommon.ToString(GetUserId()));
                if (user == null)
                    return Error("No user found!");

                Microsoft.AspNetCore.Identity.SignInResult checkOldPassword =
                    await _signInManager.PasswordSignInAsync(user.UserName, model.OldPassword, false, false);

                if (!checkOldPassword.Succeeded)
                    return Error("Old password does not matched.");

                string resetToken = await _userManager.GeneratePasswordResetTokenAsync(user);
                if (string.IsNullOrEmpty(resetToken))
                    return Error("Error while generating reset token.");

                var result = await _userManager.ResetPasswordAsync(user, resetToken, model.Password);

                if (result.Succeeded)
                    return Result();
                else
                    return Error();
            }
            catch (Exception ex)
            {
                return Error(ex);
            }
        }

4
এটি আমার পক্ষে Fx v 4.5 এর সাথেও কাজ করেছিল। অন্য সমাধান কাজ করে না। মূলত এটিও অনেক সহজ ছিল। আপনার এমনকি ব্যবহারকারীর পাওয়ার প্রয়োজন নেই কারণ সমস্ত পদ্ধতি আইডিটি গ্রহণ করবে। আমার অ্যাডমিন ইন্টারফেসে অস্থায়ী এক-অফ পুনরায় সেট করার জন্য আমার কেবল এটি প্রয়োজন ছিল যাতে আমার সমস্ত ত্রুটি পরীক্ষার প্রয়োজন হয় না।
স্টিভ হিনার

1

পাসওয়ার্ড পুনরায় সেট করার ক্ষেত্রে, নিবন্ধিত ব্যবহারকারীর ইমেলটিতে পাসওয়ার্ড রিসেট টোকন প্রেরণের মাধ্যমে এটি পুনরায় সেট করার পরামর্শ দেওয়া হয় এবং ব্যবহারকারীকে নতুন পাসওয়ার্ড সরবরাহ করতে বলুন। যদি ডিফল্ট কনফিগারেশন সহ পরিচয় কাঠামোর উপর কোনও সহজেই ব্যবহারযোগ্য .NET লাইব্রেরি তৈরি হয়। আপনি গিথুব এ ব্লগের লিঙ্ক এবং উত্স কোডে বিশদ জানতে পারেন ।


1

আমি মনে করি ASP.NET পরিচয়ের জন্য মাইক্রোসফ্ট গাইড একটি ভাল শুরু।

https://docs.microsoft.com/en-us/aspNet

বিঃদ্রঃ:

আপনি যদি অ্যাকাউন্টকন্ট্রোলার ব্যবহার না করেন এবং আপনার পাসওয়ার্ডটি পুনরায় সেট করতে না চান তবে ব্যবহার করুন Request.GetOwinContext().GetUserManager<ApplicationUserManager>();। আপনার যদি একই ওভিনকন্টেক্সট না থাকে তবে আপনার ব্যবহারের DataProtectorTokenProviderমতো একটি নতুন তৈরি করতে হবে OwinContext। ডিফল্টভাবে তাকান App_Start -> IdentityConfig.cs। কিছু দেখতে হবে new DataProtectorTokenProvider<ApplicationUser>(dataProtectionProvider.Create("ASP.NET Identity"));

এটি তৈরি করা যেতে পারে:

ওউইন ছাড়া:

[HttpGet]
[AllowAnonymous]
[Route("testReset")]
public IHttpActionResult TestReset()
{
    var db = new ApplicationDbContext();
    var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(db));
    var provider = new DpapiDataProtectionProvider("SampleAppName");
    manager.UserTokenProvider = new DataProtectorTokenProvider<ApplicationUser>(
        provider.Create("SampleTokenName"));

    var email = "test@test.com";

    var user = new ApplicationUser() { UserName = email, Email = email };

    var identityUser = manager.FindByEmail(email);

    if (identityUser == null)
    {
        manager.Create(user);
        identityUser = manager.FindByEmail(email);
    }

    var token = manager.GeneratePasswordResetToken(identityUser.Id);
    return Ok(HttpUtility.UrlEncode(token));
}

[HttpGet]
[AllowAnonymous]
[Route("testReset")]
public IHttpActionResult TestReset(string token)
{
    var db = new ApplicationDbContext();
    var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(db));
    var provider = new DpapiDataProtectionProvider("SampleAppName");
    manager.UserTokenProvider = new DataProtectorTokenProvider<ApplicationUser>(
        provider.Create("SampleTokenName"));
    var email = "test@test.com";
    var identityUser = manager.FindByEmail(email);
    var valid = Task.Run(() => manager.UserTokenProvider.ValidateAsync("ResetPassword", token, manager, identityUser)).Result;
    var result = manager.ResetPassword(identityUser.Id, token, "TestingTest1!");
    return Ok(result);
}

ওউইনের সাথে:

[HttpGet]
[AllowAnonymous]
[Route("testResetWithOwin")]
public IHttpActionResult TestResetWithOwin()
{
    var manager = Request.GetOwinContext().GetUserManager<ApplicationUserManager>();

    var email = "test@test.com";

    var user = new ApplicationUser() { UserName = email, Email = email };

    var identityUser = manager.FindByEmail(email);

    if (identityUser == null)
    {
        manager.Create(user);
        identityUser = manager.FindByEmail(email);
    }

    var token = manager.GeneratePasswordResetToken(identityUser.Id);
    return Ok(HttpUtility.UrlEncode(token));
}

[HttpGet]
[AllowAnonymous]
[Route("testResetWithOwin")]
public IHttpActionResult TestResetWithOwin(string token)
{
    var manager = Request.GetOwinContext().GetUserManager<ApplicationUserManager>();

    var email = "test@test.com";
    var identityUser = manager.FindByEmail(email);
    var valid = Task.Run(() => manager.UserTokenProvider.ValidateAsync("ResetPassword", token, manager, identityUser)).Result;
    var result = manager.ResetPassword(identityUser.Id, token, "TestingTest1!");
    return Ok(result);
}

DpapiDataProtectionProviderএবং DataProtectorTokenProviderচাহিদা কাজ করতে একটি পাসওয়ার্ড রিসেট জন্য একই নামের তৈরি করা। পাসওয়ার্ড রিসেট টোকেন তৈরি করার জন্য ওউইন ব্যবহার করা এবং তারপরে DpapiDataProtectionProviderঅন্য নামের সাথে একটি নতুন তৈরি করা কাজ করবে না।

আমি এএসপি.নেট পরিচয়ের জন্য যে কোডটি ব্যবহার করি:

ওয়েব.কনফিগ:

<add key="AllowedHosts" value="example.com,example2.com" />

অ্যাকাউন্টকন্ট্রোলার.সি:

[Route("RequestResetPasswordToken/{email}/")]
[HttpGet]
[AllowAnonymous]
public async Task<IHttpActionResult> GetResetPasswordToken([FromUri]string email)
{
    if (!ModelState.IsValid)
        return BadRequest(ModelState);

    var user = await UserManager.FindByEmailAsync(email);
    if (user == null)
    {
        Logger.Warn("Password reset token requested for non existing email");
        // Don't reveal that the user does not exist
        return NoContent();
    }

    //Prevent Host Header Attack -> Password Reset Poisoning. 
    //If the IIS has a binding to accept connections on 80/443 the host parameter can be changed.
    //See https://security.stackexchange.com/a/170759/67046
    if (!ConfigurationManager.AppSettings["AllowedHosts"].Split(',').Contains(Request.RequestUri.Host)) {
            Logger.Warn($"Non allowed host detected for password reset {Request.RequestUri.Scheme}://{Request.Headers.Host}");
            return BadRequest();
    }

    Logger.Info("Creating password reset token for user id {0}", user.Id);

    var host = $"{Request.RequestUri.Scheme}://{Request.Headers.Host}";
    var token = await UserManager.GeneratePasswordResetTokenAsync(user.Id);
    var callbackUrl = $"{host}/resetPassword/{HttpContext.Current.Server.UrlEncode(user.Email)}/{HttpContext.Current.Server.UrlEncode(token)}";

    var subject = "Client - Password reset.";
    var body = "<html><body>" +
               "<h2>Password reset</h2>" +
               $"<p>Hi {user.FullName}, <a href=\"{callbackUrl}\"> please click this link to reset your password </a></p>" +
               "</body></html>";

    var message = new IdentityMessage
    {
        Body = body,
        Destination = user.Email,
        Subject = subject
    };

    await UserManager.EmailService.SendAsync(message);

    return NoContent();
}

[HttpPost]
[Route("ResetPassword/")]
[AllowAnonymous]
public async Task<IHttpActionResult> ResetPasswordAsync(ResetPasswordRequestModel model)
{
    if (!ModelState.IsValid)
        return NoContent();

    var user = await UserManager.FindByEmailAsync(model.Email);
    if (user == null)
    {
        Logger.Warn("Reset password request for non existing email");
        return NoContent();
    }            

    if (!await UserManager.UserTokenProvider.ValidateAsync("ResetPassword", model.Token, UserManager, user))
    {
        Logger.Warn("Reset password requested with wrong token");
        return NoContent();
    }

    var result = await UserManager.ResetPasswordAsync(user.Id, model.Token, model.NewPassword);

    if (result.Succeeded)
    {
        Logger.Info("Creating password reset token for user id {0}", user.Id);

        const string subject = "Client - Password reset success.";
        var body = "<html><body>" +
                   "<h1>Your password for Client was reset</h1>" +
                   $"<p>Hi {user.FullName}!</p>" +
                   "<p>Your password for Client was reset. Please inform us if you did not request this change.</p>" +
                   "</body></html>";

        var message = new IdentityMessage
        {
            Body = body,
            Destination = user.Email,
            Subject = subject
        };

        await UserManager.EmailService.SendAsync(message);
    }

    return NoContent();
}

public class ResetPasswordRequestModel
{
    [Required]
    [Display(Name = "Token")]
    public string Token { get; set; }

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

    [Required]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 10)]
    [DataType(DataType.Password)]
    [Display(Name = "New password")]
    public string NewPassword { get; set; }

    [DataType(DataType.Password)]
    [Display(Name = "Confirm new password")]
    [Compare("NewPassword", ErrorMessage = "The new password and confirmation password do not match.")]
    public string ConfirmPassword { get; set; }
}

1

আমি কিছুটা তদন্ত করেছিলাম এবং যে সমাধান আমার জন্য কাজ করে তা হ'ল এই পোস্টে প্রতিষ্ঠিত কয়েকটি সমাধানের মিশ্রণ।

আমি মূলত এই সমাধানটি সংকলন করছি এবং আমার জন্য কী কাজ করে তা পোস্ট করছি। আমার ক্ষেত্রে, আমি। নেট কোর থেকে কোনও টোকেন ব্যবহার করতে চাই না।

public async Task ResetPassword(string userId, string password)
{
    var user = await _userManager.FindByIdAsync(userId);
    var hashPassword= _userManager.PasswordHasher.HashPassword(user, password);
    user.PasswordHash = passwordHash;
    await _userManager.UpdateAsync(user);

}

"আমার জন্য কী কাজ করে" সুরক্ষা সম্পর্কিত কোনও কিছুর জন্য যথেষ্ট যথেষ্ট নয় good আমি যথাসম্ভব প্রিমড। নেট নেট ব্যবহার করতে চাই।
হেইনজলমেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.