2015-01-07 2 views
1

Как можно автоматически назначить роль по умолчанию зарегистрированному пользователю. Я стараюсь это, но он не работает, и я получаю сообщение об ошибке:Автоматически назначать роль по умолчанию

[ProviderException: The role 'Member' was not found.] 

Это то, что я делаю:

Seed моя роль по умолчанию, так что существует с самого начала:

// Configuration.cs, Seed method. 

if (!context.Roles.Any(r => r.Name == "Member")) 
{ 
    var store = new RoleStore<IdentityRole>(context); 
    var manager = new RoleManager<IdentityRole>(store); 
    var role = new IdentityRole { Name = "Member" }; 

    manager.Create(role); // Member role gets created in AspNetRoles table. 
} 

чем после обновления-баз данных, добавить зарегистрированный пользователь к этой роли:

// AccountController, Register method (POST). 

var user = new ApplicationUser { ... } 

if (.. Succeeded) 
{ 
    .. 
    if (!Roles.IsUserInRole(user.UserName, "Member")) 
     Roles.AddUserToRole(user.UserName, "Member"); 

    return RedirectToAction("Index", "Home"); 
} 

При регистрации новой учетной записи, я получите ошибку:

[ProviderException: The role 'Member' was not found.] // Member exits in AspNetRoles 

Line 176:     if (!Roles.IsUserInRole(user.UserName, "Member")) 
Line 177:       Roles.AddUserToRole(user.UserName, "Member"); 

ответ

1

Я думаю, вы используете неправильного менеджера роли. Roles, скорее всего, является поставщиком ролей Simple Membership, а не Identity. Попробуйте следующее:

if (.. Succeeded) 
{ 
    .. 
    // if (!await UserManager.IsInRoleAsync(user.Id, "Member")) 
    await UserManager.AddToRoleAsync(user.Id, "Member"); 

    return RedirectToAction("Index", "Home"); 
} 

Я закомментировал IsInRoleAsync -check как это не требуется ИМО, если вы просто создали пользователя.

Если это еще не сделано, то необходимо создать действие асинхронной использовать async/await:

public async Task<ActionResult> Register(RegisterModel model) 
+0

Работал как шарм! Мой метод посева также использует неправильный менеджер ролей или я могу оставить его таким? – user3231419

+1

@ user3231419: Нет, вы используете 'RoleManager ', который является правильным, следовательно, роль отображается в таблице 'AspNetRoles', а не какая-то таблица' webpages_Roles' ... – ChrFin

+0

Нашел небольшую проблему с использованием этот метод: после регистрации нового пользователя пользователь получает назначение в «Member» -role в базе данных, но еще не на странице _Layout.cshtml, где я проверяю, является ли активный пользователь членом. Он только признает, что пользователь имеет роль-член, когда я выхожу из системы и снова вхожу в систему, любая идея, что пошло не так? – user3231419