سؤال

هذا يقودني الى الجنون.

أنا أستخدم أحدث إصدار من SignalR (2.0.2).هذا هو رمز المركز الخاص بي (OnConnected)

        public override Task OnConnected()
        {
            //User is null then Identity and Name too.
            Connections.Add(Context.User.Identity.Name, Context.ConnectionId);
            return base.OnConnected();
        }

وهذه هي طريقة تسجيل الدخول لوحدة التحكم الخاصة بي:

        [HttpPost]
        [AllowAnonymous]
        [ValidateAntiForgeryToken]
        public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
        {
            if (ModelState.IsValid)
            {
              var user = await UnitOfWork.UserRepository.FindAsync(model.UserName,  model.Password);

                if (user != null)
                {
                    await SignInAsync(user, model.RememberMe);

                    return RedirectToLocal(returnUrl);
                }
            }

            TempData["ErrorMessage"] = Resources.InvalidUserNameOrPassword;

            // If we got this far, something failed, redisplay form
            return RedirectToAction("Index","Home");
        }

لقد وجدت أن بعض الأشخاص يواجهون هذه المشكلة على OnDisconnected، ولم أتمكن حتى من الوصول إلى هناك.

أنا أستخدم قالب MCV5.

هل لديك أي فكرة عما هو الخطأ؟

هل كانت مفيدة؟

المحلول

لقد وجدت الحل النهائي، هذا هو رمز فئة بدء التشغيل الخاصة بي:

giveacodicetagpre.

صنع نفسي بعض القهوة، فكرت "ماذا عن تعيين إشارة بعد المصادقة، وفويلا! الآن هو الحمام كما هو متوقع. giveacodicetagpre.

نصائح أخرى

إذا كنت تستخدم Web Api وSignalR في نفس المشروع، فيجب عليك تعيين SignalR قبل تسجيل واجهة برمجة تطبيقات الويب.

غير هذا:

app.UseWebApi(GlobalConfiguration.Configuration);
app.MapSignalR();

الى هذا:

app.MapSignalR();
app.UseWebApi(GlobalConfiguration.Configuration);

تأكد من تأكيد المصادقة.يسمى التكوين BEFOR START APP.MAPMIGNALRR ()

قمت بتغيير هذا

giveacodicetagpre.

إلى هذا

giveacodicetagpre.

العناق ..

إذا كنت تقوم برسم الخرائط /signalr باعتبارك "خط أنابيب متفرع" فأنت بحاجة إلى القيام بذلك.تأكد من الاستخدام bp.UseCookieAuthentication و لا app:

app.Map("/signalr", bp =>
{
   bp.UseCookieAuthentication(new CookieAuthenticationOptions
   {
        AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
        LoginPath = new PathString("/store/youRaccount/login")
   });

نصيحة:لقد غيرت الغلاف بشكل سلمي لذلك عندما أرى youRaccount في شريط URL أعلم أنه يعمل :-)

.NET Core SignalR فقط

بالنسبة لـ .NET Core SignalR الأحدث، توضح التعليمات الكاملة أنه عند استخدام websockets، يجب عليك سحب AccessToken يدويًا من سلسلة الاستعلام.من السهل تفويت هذا.

https://docs.microsoft.com/en-us/aspnet/core/signalr/authn-and-authz?view=aspnetcore-2.2

في الأساس حيث تتصل AddAuthentication() تحتاج إلى إضافة AddJwtBearer() ثم قم بتعيين معالج لـ OnMessageReceived معالج.

ابحث عن "OnMessageReceived" في الرابط أعلاه للحصول على الرمز.إنه أمر غريب بعض الشيء، بمعنى أنه يتعين عليك إضافة هذا بنفسك - ولكن لهذا السبب من السهل تفويته أيضًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top