ASP.NET Core 3.0 登入機制實作(claims-based authentication)

我們開新專案時,專案範本可以選擇「個別使用者帳戶」驗證方式,這時候專案就會有登入的機制了,但是很多工程師都不這麼用,理由是:
1. 他是 core first 的方式,不是它們習慣的 db first。
2. 要客製化時要改很多code,感覺太麻煩。

不過有個時機可能會用到他,就是要整合第三方登入機制,如Facebook, Twitter..等等,因為只要設定一下,就可以了。

可以參考: https://docs.microsoft.com/zh-tw/aspnet/core/security/authentication/identity?view=aspnetcore-3.0&tabs=visual-studio

閱讀全文〈ASP.NET Core 3.0 登入機制實作(claims-based authentication)〉

ASP.NET Core 3.0 靜態檔案(Static Files)

在開發 ASP.NET MVC 5 時,css、fonts、js…等等的靜態檔案(Static Files),都是放在專案裡頭的 Content 的資料夾,但是在開發 ASP.NET Core 3.0 的時候,我們特別要注意的是,要必須 把HTML 所用到的靜態檔案放到 wwwroot 裡頭。

參考附圖中 wwwroot 資料夾及網頁相對路徑

ASP.NET Core 3.0 (Preview 7) 建立 Web 應用程式

使用 .NET Core 3.0 已經一陣子了,最早我是用 .NET Core 3.0 (Preview 5) 寫了公司的內部系統,剛開始不熟,直接在Controller 打預存程式回傳 ViewModel 的格式,直接給 Razor 來用,若以小型專案來說,算是一個滿有效率的解決方案。

目前開發 .NET Core 3.0 時,要使用 Visual Studio 2019,我目前的 版本 16.1.6。
另外安裝 .NET Core 3.0 的 SDK,下載連結: https://dotnet.microsoft.com/download/dotnet-core/3.0 ,可以下載 Preview 7 版

先來說明安裝後,如何開新專案

閱讀全文〈ASP.NET Core 3.0 (Preview 7) 建立 Web 應用程式〉

ASP.NET MVC ALERT訊息做法

這是一個簡單的問題,說明如下

Step01. 在Action中設定 TempData[“message”] = “此帳號已被註冊”;

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Register(RegisterViewModel model)
{
    if (ModelState.IsValid)
    {
          var user = await UserManager.FindByNameAsync(model.UserName);

       if (user != null)
       {
            //TempData 只會被讀一次,之後就會失效
            TempData["message"] = "此帳號已被註冊";
            return View(model);
       }else
       {
            //執行註冊
            //完成後,轉頁
       }
     }
       return View(model);
}

Step02.在 _layout.cshtml 中判斷 TempData[“message”] 有沒有值,有值就出現alert

<!DOCTYPE html>
<html lang="zh-TW">
<head>
 @if (TempData["message"] != null)
{
    <script type="text/javascript">
        var message = @Html.Raw(Json.Encode(TempData["message"]));
        alert(message);
    </script>
}
</head>
<body>
   @RenderBody()
</body>
</html>

ASP.NET MVC 的 ValidateAntiForgeryToken機制

這是ASP.NET MVC 為防止 CSRF (Cross-Site Request Forgery) 跨站偽造請求的攻擊的設計,作法如下:

Step01. 在 Action 加上 [ValidateAntiForgeryToken] 標籤

[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{ 
    ...
    return View();
}

Step02. 在 cshtml 就必須要加上 @Html.AntiForgeryToken(),否則會出錯

@using (Html.BeginForm("Login", "Account", FormMethod.Post))
{
    @Html.AntiForgeryToken()
}