[英]ASP.NET Core Web API - System.InvalidOperationException: The LINQ expression 'DbSet<Mandate>()
[英]System.InvalidOperationException: The LINQ expression.... 'could not be translated. ASP.NET 6 ...Translation of method 'DecodeFrom64' failed
在 ASP.NET Core 6 Web API 項目中,我試圖在將密碼與輸入的密碼進行比較之前從數據庫中檢索和解碼密碼。
我有這段代碼:
public async Task<User> GetUser(string email, string password)
{
return await _context.Set<User>().Where(e => e.Email == email
&& DecodeFrom64(e.Password) == password).FirstOrDefaultAsync();
}
我收到此錯誤:
System.InvalidOperationException: The LINQ expression 'DbSet<User>().Where(u => u.Email == __email_0 && DbHelper.DecodeFrom64(u.Password) == __password_1)' could not be translated. Additional information: Translation of method 'UserOnboardingApi.Model.DbHelper.DecodeFrom64' > failed.
我該如何解決這個問題?
謝謝
期望從數據庫中檢索和解碼密碼並與用戶輸入的密碼進行比較
EF 將 LINQ(使用IQueryable
時)翻譯成 SQL,它對您的方法DecodeFrom64
,也無法翻譯它。 選項是
public async Task<User> GetUser(string email, string password)
{
return await _context.Set<User>()
.Where(e => e.Email == email
&& e.Password == YourEncodeMethod(password))
.FirstOrDefaultAsync();
}
public async Task<User> GetUser(string email, string password)
{
var user = await context.Set<User>()
.FirstOrDefaultAsync(e => e.Email == email);
if(user is not null && DecodeFrom64(user.Password) == password)
{
return user;
}
return null;
}
但總的來說,您應該考慮存儲密碼哈希值(請參閱此問題),而不是編碼的哈希值並檢查它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.