示例#1
0
        public override void Configure(Container container)
        {
//            var authRepo = new InMemoryAuthRepository();
//            container.Register<IAuthRepository>(c => authRepo);
//            authRepo.CreateUserAuth(new UserAuth {
//                UserName = "******",
//                Email = "*****@*****.**",
//                DisplayName = "ServiceStack User",
//                Roles = new List<string> { "Member" },
//            }, "test");

            Plugins.Add(new AuthFeature(() => new AuthUserSession(),
                                        new IAuthProvider[] {
                new CredentialsAuthProvider(AppSettings),
                new NetCoreIdentityAuthProvider(AppSettings)
                {
                    PopulateSessionFilter = (session, principal, req) =>
                    {
                        //Example of populating ServiceStack Session Roles for EF Identity DB
//                            var userManager = req.TryResolve<UserManager<ApplicationUser>>();
//                            var user = userManager.FindByIdAsync(session.Id).Result;
//                            var roles = userManager.GetRolesAsync(user).Result;

                        var user = ApplicationServices.DbExec(db =>
                                                              db.GetIdentityUserById <ApplicationUser>(session.Id));

                        session.Roles = req.GetMemoryCacheClient().GetOrCreate(
                            IdUtils.CreateUrn(nameof(session.Roles), session.Id),
                            TimeSpan.FromMinutes(20),
                            () => ApplicationServices.DbExec(db =>
                                                             db.GetIdentityUserRolesById(session.Id)));
                    }
                },
            }));

            SetConfig(new HostConfig {
                AdminAuthSecret = "secret"
            });

            ViewUtils.Load(AppSettings);
        }