2015-07-09 2 views
4

Я использую MVC5 с последней версией Identity (2.1). Я пытаюсь создать заявку пользователя для facebook access_token. Я никогда не создавал претензии раньше, но моя другая функция Identity работает отлично, насколько я могу судить.Identity 2.0 Претензии не добавляются в базу данных

У меня есть эта строка кода в моих Startup.Auth.cs:

context.Identity.AddClaim(new Claim("urn:facebook:access_token", 
context.AccessToken, xmlSchemaString, "Facebook")); 

Полный кусок кода здесь, если Вам необходима дополнительная ссылка: Integrate facebooksdk with Identity 2.0

Если я ставлю перерыв в код в строке сразу после этой строки, я вижу, что все извлекается правильно, а самое главное - content.AccessToken (это огромная строка). Однако он никогда не попадает в базу данных после успешного входа в систему.

В качестве теста, я попытался упростить его, изменив строку следующим образом:

context.Identity.AddClaim(new System.Security.Claims.Claim(ClaimTypes.Email, "[email protected]")); 

Тот же результат, никаких ошибок, но ничего не добавляется в базу данных. Затем я попытался добавить эту строку коды в моем IdentityModels.cs именно там, где он говорит вам поставить пользовательские требования:

// Add custom user claims here 
     userIdentity.AddClaim(new Claim(ClaimTypes.DateOfBirth, "01/01/1972")); 

того же результат ... нет ошибок и никогда не делаю его в базу данных. Может ли кто-нибудь подумать о какой-либо причине, какова моя проблема?

Единственное, что было в моей настройке Identity, это то, что я следил за статьей о том, как использовать имя пользователя вместо электронной почты (в качестве имени пользователя). Кроме того, я изменил имена таблиц Identity (например, UserClaims) в блоке OnModelCreating, который, по-видимому, является довольно стандартной процедурой.

У меня такое чувство, что это будет какой-то новобранец, но на данный момент я в тупике. Буду признателен за любую оказанную помощь.

ответ

8

В базе данных сохраняются ваши пользовательские претензии для пользователей. Если у пользователя есть какие-либо претензии в БД, они будут применены к файлу auth с их логином.

Чтобы добавить претензий в базу данных, необходимо использовать UserManager:

await userManager.AddClaimAsync(userId, new Claim("MyClaimType", "MyClaimValue")); 

Если вы добавляете требования к ClaimsIdentity, то претензии не сохраняются в базе данных, но добавил к куки непосредственно и не будет автоматически добавляется при следующем входе пользователя в систему.

+0

Это определенно работает, несмотря на то, что я полностью озадачен Identity и OWIN. Благодаря! – SumNone

+1

Итак, просто для пояснения, похоже, что userIdentity.AddClaim() добавляет претензию к пользователю _in context_, но не сохраняется в базе данных. userManager.AddClaim() добавляет претензию к базе данных, но не к текущему контексту пользователя.Первый был бы хорош для тестирования, последний для создания претензий и настойчивости. – shloosh

+0

@shloosh правильный! – trailmax

0

Итак, ваша проблема заключается в том, что БД не попадает, чтобы сохранить претензии? Претензии хранятся в защищенном файле cookie с идентификатором ASP.NET;) ASP.NET Identity Framework прочитает файл cookie в начале каждого запроса и заполнит коллекцию претензий для вас в моем понимании. Просто убедитесь, что вы видите заявку на facebook с вашего контроллера MVC после входа в систему. Я думаю, что на самом деле проблем нет.

+1

Ух, серьезно? Чтобы ответить на ваш вопрос, да. Я поражал выполнение в моем окне запроса sql, как 1000 раз, после того, как пробовал всевозможные вещи. Итак, следующим логическим вопросом будет: для чего используется таблица sql UserClaims? Есть ли флаг или аналогичный параметр, который вы можете установить для хранения этих требований в БД? Тем временем я попробую то, что вы предложили ... – SumNone

Смежные вопросы