使用Cookie的MVC6 PostAuthentication

时间:2015-07-31 08:52:00

标签: session-cookies asp.net-core-mvc

我正在寻找一种在cookie登录后调用函数onPostAuthenticate的方法。

我尝试搜索SignInAsync覆盖,或者在startup.cs中使用委托或lambda来调用我自己的类/函数。

如果我的登录控制器构造函数中的任何事件/代理可以连接,那将会很棒。

public HomeController(UserManager<User> userManager, SignInManager<User> signInManager, AddressbookAppContext AddressbookDb)
    {
        _userManager = userManager;
        _signInManager = signInManager;

        //_signInManager.SignInAsync ();
        this.AddressbookDb = AddressbookDb;
    } 

1 个答案:

答案 0 :(得分:1)

经过长时间的斗争。我设法找到一个地方获得Post Login以填充从db到user的记录。

要查找的地方是CookieAuthenticationOptions中的CookieAuthenticationNotifications。在登录完成后会调用一个OnValidatePrincipal。代码本身是不言自明的。

  services.Configure<CookieAuthenticationOptions>(opt =>
        {
            opt.Notifications = new CookieAuthenticationNotifications
            {
                OnValidatePrincipal = async (context) =>
                {
                    await Task.Run(() =>
                    {
                        if (context.Principal.Identity != null && context.Principal.Identity.IsAuthenticated)
                        { 

                            SecurityManager SecMan = new SecurityManager(new AddressbookAppContext(Configuration.Get("Data:DefaultConnection:ConnectionString"))); 
                            SessionHelper<ContextUser>.Put(context.HttpContext, "LoggedInUser", 
                                SecMan.FetchContextUser(context.Principal.Identity.Name));

                            // context.HttpContext.Session.SetString("iBoltzTest", "test");
                        }
                        else //UnAuthorized

                        {

                            //Your code is here

                        }

                    });
                }
            };
            opt.LoginPath = PathString.FromUriComponent("/Home/Login");
        });