مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

رضا نصیری

عضویت از 1392/10/01

IOptions IdentityOptions در Identity Core

  • جمعه 19 آبان 1396
  • 18:10
تشکر میکنم

سلام - خسته نباشید دوستان

من تو Identity Core 2 مدل UserClaimsPrincipalFactory رو دارم کاستومایز میکنم.

توی کانستراکتورش ازم  IOptions<IdentityOptions> optionsAccessor  رو میخواد.

خیلی تلاش کردم ولی نمیدونم بهش چی پاس بدم. ممنون میشم راهنمایی کنید

پاسخ های این پرسش

تعداد پاسخ ها : 6 پاسخ
کاربر سایت

سهیل علیزاده

عضویت از 1396/04/09

  • جمعه 19 آبان 1396
  • 18:22

محتوای فایل csporjخود را قرار بدید.

کاربر سایت

سهیل علیزاده

عضویت از 1396/04/09

  • جمعه 19 آبان 1396
  • 18:23

دستور زیر را اجرا کنید:

Install-Package Microsoft.Extensions.Options -Version 2.0.0

کاربر سایت

رضا نصیری

عضویت از 1392/10/01

  • جمعه 19 آبان 1396
  • 18:31
 public class AppClaimsPrincipalFactory : UserClaimsPrincipalFactory<CustomUser, CustomRole>
    {
        public AppClaimsPrincipalFactory(
       UserManager<CustomUser> userManager
       , RoleManager<CustomRole> roleManager
       , IOptions<IdentityOptions> optionsAccessor)
        : base(userManager, roleManager, optionsAccessor)
        { }

        public async override Task<ClaimsPrincipal> CreateAsync(CustomUser user)
        {
            var principal = await base.CreateAsync(user);
            if (!string.IsNullOrWhiteSpace(user.FirstName))
            {
                ((ClaimsIdentity)principal.Identity).AddClaims(new[] { new Claim(ClaimTypes.GivenName, user.FirstName) });
            }
            if (!string.IsNullOrWhiteSpace(user.LastName))
            {
                ((ClaimsIdentity)principal.Identity).AddClaims(new[] { new Claim(ClaimTypes.Surname, user.LastName), });
            }
            if (!string.IsNullOrWhiteSpace(user.LastName) && !string.IsNullOrWhiteSpace(user.FirstName))
            {
                ((ClaimsIdentity)principal.Identity).AddClaims(new[] { new Claim(ClaimTypes.Surname, user.DisplayName), });
            }
            return principal;
        }
    }

حالا میخوام از این کلاس نمونه بسازم.

یوزر منیجر و رول منیجر رو پاس میدم. ولی کانستراکتور سومی رو نمیدونم چی پاس بدم

کاربر سایت

سهیل علیزاده

عضویت از 1396/04/09

  • جمعه 19 آبان 1396
  • 18:33

فایل csproj در مسیر پروژه شما قرار دارد.

کاربر سایت

رضا نصیری

عضویت از 1392/10/01

  • جمعه 19 آبان 1396
  • 19:21

آقای علیزاده مثل اینکه شما هنوز متوجه منظور بنده نشده اید.

 AppClaimsPrincipalFactory a = new AppClaimsPrincipalFactory(_userManager, _roleManager, optionsAccessor);

تو خط بالا بجای  optionsAccessor چی بنویسم؟؟؟

کاربر سایت

سهیل علیزاده

عضویت از 1396/04/09

  • جمعه 19 آبان 1396
  • 19:30

IOptions<IdentityOptions> باید به صورت فیلد تعریف شده و توسط سازنده کلاس مقدار دهی شود. ASP.NET Core به صورت خودکار وابستگی مربوط به IOptions<IdentityOptions> را به پارامتر ورودی سازنده تزریق می کند.

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)