Özel bir UserStore
uyguladık, IUserStore<DatabaseLogin, int>
ve IUserPasswordStore<DatabaseLogin, int>
uygular.UserManager.FindAsync ile özel bir UserStore kullanma
Benim Girişi eylem yöntemi aşağıdaki gibidir: I Authentication
yazdım özel kimlik doğrulama sınıfında
if (ModelState.IsValid)
{
if (Authentication.Login(user.Username, user.Password))
{
DatabaseLogin x = await UserManager.FindAsync(user.Username, user.Password);
DatabaseLogin Login = Authentication.FindByName(user.Username);
if (Login != null)
{
ClaimsIdentity ident = await UserManager.CreateIdentityAsync(Login,
DefaultAuthenticationTypes.ApplicationCookie);
AuthManager.SignOut();
AuthManager.SignIn(new AuthenticationProperties
{
IsPersistent = false
}, ident);
return RedirectToAction("Index", "Home");
}
}
else
{
ModelState.AddModelError("", "Invalid Login");
}
}
return View();
, ben iyi, ayrıca
FindByName
yöntem bir uygulama kullanıcıyı döndürür çalışan bir Girişi yöntemi var. Ancak bu girişle
SignIn
'u denerseniz, kullanıcı kimliği doğrulanmamış olarak tanınır ve
HttpContext.User.Identity
her zaman boştur, bu yüzden
UserManager.FindAsync
'u denemek zorunda olduğumu hayal edin.
Bu yöntem, FindByNameAsync
ve GetPasswordHashAsync
numaralarını arar ve her zaman boş değer döndürür. Eğer ben veritabanı kullanıcılarını kullanıyorum görebileceğiniz gibi
public Task<DatabaseLogin> FindByNameAsync(string userName)
{
if (string.IsNullOrEmpty(userName))
throw new ArgumentNullException("userName");
return Task.FromResult<DatabaseLogin>(Authentication.FindByName(userName));
}
public Task<string> GetPasswordHashAsync(DatabaseLogin user)
{
if (user == null)
throw new ArgumentNullException("user");
return Task.FromResult<string>(user.Password);
}
Ve Authentication.FindByName
public static DatabaseLogin FindByName(string name)
{
string GetUserQuery = string.Format(
"USE db;SELECT principal_id AS id, name as userName, create_date AS CreateDate, modify_date AS modifyDate FROM sys.database_principals WHERE type='S' AND authentication_type = 1 AND name = '{0}'"
, name);
DatabaseLogin user;
using (var db = new EFDbContext())
{
user = db.Database.SqlQuery<DatabaseLogin>(GetUserQuery).FirstOrDefault();
}
user.Password = Convert.ToBase64String(Encoding.ASCII.GetBytes("pass"));
return user;
}
, ben onlar için bir karma şifre almak nasıl emin değilim. Şimdilik, sadece doğru şifreyi Base65 saklıyorum!
Nerede yanlış gideceğimi bilmiyorum, herhangi bir rehberlik açıktır.
Cevabınızı sorunuzdan ve uygun bir SO cevabına aktarır mısınız? Kendine cevap verebilirsin. :) –