Loading...
VenelinGrozev avatar VenelinGrozev 130 Точки

[Homework] ASP.NET Web API - User Logins

Здравейте,

Регистрирах потребител през Постман-а и го логнах след това. Когато обаче се опитам да проверя кой е логнат в момента с string currentUserId = this.User.Identity.GetUserId(); винаги получавам null. В таблицата AspNetUserLogins същевременно не се появява запис, че някой се е логнал въпреки, че при логина се връща access token.

Та въпросите ми в случая са:

- трябва ли да след логин да се появи запис в AspNetUserLogins таблицата?

- защо this.User.Identity.GetUserId(); връща null?

Тагове:
1
C# Web Services & Cloud
nikola.m.nikolov avatar nikola.m.nikolov 830 Точки

Предполагам не само аз останах изненадан, че автоматично генерирания AuthorController няма метод за стандартен login. Търсейки в google попаднах на ето тази страница в сайта на Наков. В крайна сметка разкарах всичките излишни external register-и и login-и и го направих като Наков стандартен login със sessions. За целта в базата имам отделна таблица Sessions.

2
a_rusenov avatar a_rusenov 1103 Точки

Освен ако нямаш причина, не е необходимо да персистваш токените в базата. Още повече при всеки един логин се вдига сървър в сървъра, за да извикаш истинксия сървис. 

0
Nichigo avatar Nichigo 2 Точки

Пробвай да подадеш  токена като в самата заявка - в Headers задаваш Authentication  със value: Bearer {token} .Така при мен userId-то се връща коректно , а не null.Hope it helps :)

1
VenelinGrozev avatar VenelinGrozev 130 Точки

Сега като се замисля аз Bearer-a май го слагах във формата с параметрите а не в хедъра и това може да е причината. Вечерта като се върна ще го проверя това.

0
VenelinGrozev avatar VenelinGrozev 130 Точки

Така и се оказа - Authorization-a съм давал като параметър във формата вместо в хедъра и затова не е намирало кой е логнат. Съжалявам че вдигнах излишен шум.

0
a_rusenov avatar a_rusenov 1103 Точки

В допълнение на вече казаното:

AspNetUserLogins таблицата е само за external logins (Facebook login / Twitter login и т.н.).

ASP.NET Identity моделът никъде не пази генерираните токени. При логин username, exire date, права и други неща свързани с твоята самоличност се криптират в т.н. token и той се връща на потребителя. При всяка негова заявка той го праща в хедърите с ключ Authorization и стойност Bearer {token}. От там нататък, всеки път когато някоя заявка пристигне, Web API декриптира token-а и можем да извличаме данни за потребителя през this.User.Inentity.

4
VenelinGrozev avatar VenelinGrozev 130 Точки

Благодаря, това е доста полезна информация. Честно казано аз си представях, че работи по по-различен начин.

0
thepowerof4 avatar thepowerof4 98 Точки

И аз закучих на логин функционалността. Както е споменато, няма такъв метод. Лошото е че и при регистрация не връща token и разглеждайки register метода, то наистина връща само един празен Ok(); и не логва юзъра. В базата данни се вижда, че е регистриран юзър. Въпросите ми към екипа на курса са два - как да го накараме да връща token при регистрация и как да създадем стандартен логин? Как трябва да си решим домашното, без това? Показаният от nikola.m.nikolov по-горе линк дава отговор как Наков го е направил, това ли трябва да ползваме?

P.S Не мога да го накрам да сработи - използвайки логин методите на Наков, заявката ми връща 400 Not Found - с подобреният метод. С другият това:
{
  "Message": "No HTTP resource was found that matches the request URI 'http://localhost:7151/api/Token'.",
  "MessageDetail": "No type was found that matches the controller named 'Token'."
}

Да разбирам ли че Microsoft са направили промени? VS2015.

0
20/08/2015 20:34:29
a.angelov avatar a.angelov 1316 Точки

Стандартния логин е на адрес: http://localhost:{port}/token 

Аз засега така правя логването, не съм се мъчил да го правя през регистрацията да връща тоукън...

 

Едит - няма api пред /token - затова ти връща, че нямаш такъв ресурс.

1
20/08/2015 20:38:16
thepowerof4 avatar thepowerof4 98 Точки

Бладгаря, промених препратката в метода на Наков от /api/Token на /Token и сработи. Най-накрая!

0
VenelinGrozev avatar VenelinGrozev 130 Точки

Само да допълня Анатоли, че линка за логване се конфигурира в App_Start/Startup.Auth.cs файла в реда с

TokenEndpointPath = new PathString("/Token")

Хвърли едно око на <този въпрос в stackoverflow>. Там едно индийче го е описало добре.

2
20/08/2015 20:55:39
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.