簡體   English   中英

System.InvalidOperationException:LINQ 表達式....'無法翻譯。 ASP.NET 6...方法“DecodeFrom64”的翻譯失敗

[英]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();
}
  • 通過 email 獲取用戶(我想它應該是唯一的)並在客戶端檢查密碼。 沿着這條線的東西:
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;
}
  • 在數據庫端實現解碼 function 並將其映射

但總的來說,您應該考慮存儲密碼哈希值(請參閱此問題),而不是編碼的哈希值並檢查它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM