मेरे परिदृश्य में, उपयोगकर्ताओं और व्यवसायों के बीच मेरे कई-से-अनेक संबंध हैं। तो, एक व्यवसाय में कई कर्मचारी हो सकते हैं, और एक उपयोगकर्ता कई व्यवसायों का कर्मचारी हो सकता है।

लॉगिन पेज पर, मैं केवल ईमेल और पासवर्ड टेक्स्टबॉक्स दिखाना चाहता हूं। एक बार जब वे सफलतापूर्वक प्रमाणित हो जाते हैं, तो मैं उन्हें एक ऐसे पृष्ठ पर पुनर्निर्देशित करना चाहूंगा, जिसमें उन व्यवसायों का ड्रॉपडाउन है, जिनके साथ वे कार्यरत हैं।

चूंकि वे पहले ही प्रमाणित कर चुके हैं, इसलिए उनके दावे पहले ही भरे जा चुके हैं। मैं बाद में एक और दावा (उनका BusinessID) कैसे जोड़ूँ?

0
Jason T 25 जिंदा 2021, 16:12
मुझे लगता है कि आपका प्रश्न stackoverflow.com/questions/53292286/…
 – 
Sourcerer
25 जिंदा 2021, 22:35
 – 
Sourcerer
25 जिंदा 2021, 22:35
मैं सकारात्मक नहीं हूं, लेकिन मुझे ऐसा नहीं लगता क्योंकि मुझे उस BusinessID को पास करने की क्षमता की आवश्यकता है जिसे उपयोगकर्ता इसमें चुनता है।
 – 
Jason T
25 जिंदा 2021, 23:13
दूसरे और तीसरे उत्तर की जाँच करें। यह काम करता है। मुझे भी यही समस्या थी, लेकिन अन्य प्रश्नों के लिए, मैंने अपना उपयोगकर्ता वर्ग बनाया, पहचान उपयोगकर्ता से विरासत में मिला, और व्यवसाय (मेरे मामले में ग्राहक) के साथ संबंध जोड़ना।
 – 
Sourcerer
26 जिंदा 2021, 02:08

1 उत्तर

सबसे बढ़िया उत्तर

इसका उत्तर यह बताता है कि आप कब प्रमाणित करते हैं और OAUTH सर्वर से दावे प्राप्त करते हैं। हम नहीं जानते कि आप स्थानीय पहचान तालिका या OAUTH का उपयोग कर रहे हैं, लेकिन किसी भी स्थिति में।

  1. अपने स्वयं के UserClaimsPrincipalFactory वर्ग कार्यान्वयन को परिभाषित करें
  2. स्टार्टअप में सेवाओं के रूप में पंजीकरण करें ConfigureServices
  3. जब उपयोगकर्ता व्यवसाय प्रकार का चयन करता है, तो GenerateClaimsAsync विधि का आह्वान करें।

मैं कुछ पुराना कोड शामिल करता हूं (आखिरकार हमने दूसरे तरीके से लागू किया), लेकिन शायद आपकी मदद कर सकता है।

  1. परिभाषित करें कि आप UserClaimsPrincipalFactory के स्वामी हैं। इसके लिए, मैंने उपयोगकर्ता वर्ग को अनुकूलित किया है, और एक नया कारखाना जोड़ा है
    using System;
    using System.ComponentModel.DataAnnotations.Schema;
    using System.Security.Claims;
    using System.Text.Json.Serialization;
    using System.Threading.Tasks;
    using Microsoft.AspNetCore.Identity;
    using Microsoft.Extensions.Options;
    
    namespace Common.Models.Identity {
        public class User : IdentityUser<int> {
    
    
            public bool SendAlertByEmail { get; set; }
            public int ClientId { get; set; } = Client.DefaultClientId;
            [JsonIgnore, ForeignKey("ClientId")]
            public virtual Client Client { get; set; } = null!;
        }
    
        public class ApplicationUserClaimsPrincipalFactory : UserClaimsPrincipalFactory<User> {
            public ApplicationUserClaimsPrincipalFactory(
                            UserManager<User> userManager,
                            IOptions<IdentityOptions> optionsAccessor)
                            : base(userManager, optionsAccessor) {
            }
    
            protected override async Task<ClaimsIdentity> GenerateClaimsAsync(User user) {
                ClaimsIdentity identity;
    
                identity = await base.GenerateClaimsAsync(user);
                identity.AddClaim(new Claim("ClientId", user.ClientId.ToString()));
                identity.AddClaim(new Claim("ClientDescription", user.Client.Description));
                return identity;
            }
        }
    }
  1. अपने ConfigureServices में, इसे कॉन्फ़िगर करें

     #region Configure identity
     services
         .AddDefaultIdentity<User>(
             options => {
                 options.SignIn.RequireConfirmedAccount = true;
                 options.Stores.MaxLengthForKeys = 256;            // Max length for key. Regenerate migration if change this
             })
         .AddEntityFrameworkStores<ApplicationDbContext>()
         .AddDefaultUI()
         .AddDefaultTokenProviders()
         .AddClaimsPrincipalFactory<ApplicationUserClaimsPrincipalFactory>();
    
     services.Configure<IdentityOptions>(options => {
         // Password settings.
         options.Password.RequireDigit = true;
         options.Password.RequireLowercase = true;
         options.Password.RequireNonAlphanumeric = true;
         options.Password.RequireUppercase = true;
         options.Password.RequiredLength = 6;
         options.Password.RequiredUniqueChars = 1;
    
         // Lockout settings.
         options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5);
         options.Lockout.MaxFailedAccessAttempts = 5;
         options.Lockout.AllowedForNewUsers = true;
    
         // User settings.
         options.User.AllowedUserNameCharacters =
         "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+";
         options.User.RequireUniqueEmail = false;
     });
    
     services.ConfigureApplicationCookie(options => {
         // Cookie settings
         options.Cookie.HttpOnly = true;
         options.ExpireTimeSpan = TimeSpan.FromMinutes(5);
    
         options.LoginPath = "/Identity/Account/Login";
         options.AccessDeniedPath = "/Identity/Account/AccessDenied";
         options.SlidingExpiration = true;
     });
     #endregion Configure identity
    
  2. अपने "व्यवसाय/ग्राहक का चयन करें" अनुरोध के लिए अपने ApplicationUserClaimsPrincipalFactory पास करने के लिए IoC का उपयोग करें, और दावा जोड़ने के लिए इसका उपयोग करें

0
Sourcerer 28 जिंदा 2021, 12:52