2016-03-24 26 views
1

Burada, bir kullanıcının bir parolayı sıfırlamak istediğinde, sistemin e-postayla kullanıcıya rastgele oluşturulmuş geçici bir parola göndermesi gerektiği bir senaryo var. Geçici şifreyi veritabanında yeni bir sütunda saklamayı denedim, ancak bu yaklaşımın iyi çalışıp çalışmadığından emin değilim. Bazı insanlar token böyle aşağıdaki gibi kullanılmasını öneriyoruz:C# ASP.NET Kimlik

string code = await UserManager.GeneratePasswordResetTokenAsync(user.Id); 

Ancak, ben ASP.NET gerçekten yeni ve token aşina değilim. Geçici olarak oluşturulan token'u veritabanında token ile nasıl karşılaştırabilirim?

model.temppwd = Membership.GeneratePassword(10, 1); 

herkes bana bazı örnekle bu işlevi uygulamak için ideal bir yol sağlayabilir:

Bunu uygulamak için bulunan bir başka yöntem rastgele bir karakter dizesi üreten bir Membership.GeneratePassword işlevi sahip olmaktır? Teşekkür ederim! Projemizde

+2

http://www.asp.net/identity/overview/features-api/account-confirmation-and-password-recovery-with-aspnet-identity –

+0

Aslında, ASP.NET Web Uygulaması proje şablonu şunları içerir: Tam uygulama –

+1

@Joe bir şey saklamanıza gerek yoktur. Simge * geçici bir şifre değildir * ve * herhangi bir yerde saklamanıza gerek yoktur. Bu, kullanıcı/parola deposu olduğu gibi ASP.NET Kimlik tarafından halledilir. ASP.NET MVC proje şablonunda, AccountController'ın "var result =" UserManager.ResetPasswordAsync (user.Id, model.Code, model.Password) 'yi çağırdığı ResetPassword yöntemi olduğunu göreceksiniz. Kullanıcı tarafından doğrudan ya da bir bağlantı aracılığıyla girilen belirteç –

cevap

0

biz

Guid.NewGuid();

kullanılan ve bir sorgu dizesi olarak kurtarmak şifre eylem (MVC) için bağlantı içeren e-posta gönderdi: https://yoursite.com/account/reset/?code=your_guid_code

Örnek:

ResetPassword resetPassword = new resetPassword(); resetPassword.Code = Guid.NewGuid(); string strLink = string.Format("{0}", actionUrl + "?code="+ resetPassword.Code);

Ve şimdi e-postanız ile göndermek için strLink'u kullanabilirsiniz. Guid'i, userId ile birlikte bir veritabanı tablosunda saklamanız gerekir, böylece sıfırlama prosedürünü uygulayabilirsiniz. Kullanıcı e-postanızdaki bağlantıyı tıkladığında, yeni bir şifre isteyen bir form/görünüm elde eder. Ayrıca, bu kod için bir son kullanma limiti sağlamak için bu tabloya fazladan bir sütun eklemek isteyeceksiniz. Kullanıcı e-postadaki bağlantıyı tıklarsa ve süresi dolmuşsa, kullanıcıyı bilgilendirmeli ve başka bir kod ile başka bir e-posta göndermelisiniz.

+0

Yanıt için teşekkürler, kullanıcıya, kullanıcı için parola değiştirip rasgele bir parola girerek onu uygulayabileceğim herhangi bir yol var mı? – Joe

+0

Bence ekstra bir adım daha ekliyor. Rasgele bir şifre sağlayabilirsiniz, elbette, ama her neyse değiştirmek zorunda kalacağı için çok kullanışlı değil. Bunun yerine, sınıfınızda/modelinizde "MustChangePasswordOnLogin" gibi bir boolean özelliği ekleyebilir ve uygulama e-postayı gönderdiğinde bunu true olarak ayarlayabilirsiniz. Kullanıcı e-postadaki bağlantıyı takip ettiğinde, mülkü kontrol edin. Yanlışsa, yanlışlıkla tekrar tıklattığı anlamına gelir, bu nedenle varsayılan bir görünüm yükleyin. Kullanıcı şifresini değiştirdikten sonra, mülkü false değerine ayarlayın ve işiniz bitti ve yeni hesap oluştururken bu şemayı yeniden kullanabilirsiniz. –

İlgili konular