昨天做好初步的畫面了。今天來寫商業邏輯部分。
步驟:
step1.
新增AuthService.cs 和 IAuthService.cs,在系統裡面。(注意:因為是新的interface所以需要再program.cs裡面進行註冊)
step2.
IAuthService.cs
public interface IAuthService
{
Task<bool> LoginUserCheckPwd(string code);
}
AuthService.cs
我們這邊簡單一點,只驗證密碼的明碼就好,不加密驗證甚麼的、也不多加甚麼驗證邏輯。
public class AuthService : IAuthService
{
private readonly ApplicationDbContext _db;
public AuthService(ApplicationDbContext db)
{
_db = db;
}
public async Task<bool> LoginUserCheckPwd(string code)
{
return await _db.AuthUsers.AnyAsync(x => x.Pwd == code);
}
}
step3.AuthService.cs註冊到loginController。(請自行撰寫)
step4.加上接收打密碼驗證的Request。
這邊是利用.Net 本身提供的權限、驗證套件去做的。(可以看一下註解的說明)
[HttpPost]
public async Task<IActionResult> Index(string code)
{
if (await _auth.LoginUserCheckPwd(code))
{
// 要記錄在Cookie 裡面的內容
var claims = new List<Claim>
{
new Claim("UserCode",code),
};
var claimsIdentity = new ClaimsIdentity(
claims,
CookieAuthenticationDefaults.AuthenticationScheme);
// HttpContext 回傳時會把註冊訊息輸入進去。
await HttpContext.SignInAsync(
CookieAuthenticationDefaults.AuthenticationScheme,
new ClaimsPrincipal(claimsIdentity),
new AuthenticationProperties
{
ExpiresUtc = DateTimeOffset.UtcNow.AddMinutes(1),
IsPersistent = true,
});
return Redirect("/");
}
return View();
}
今天就先到這一小段落,明天再繼續完成一小步驟喔~