2015-01-07 2 views
1

등록 된 사용자에게 기본 역할을 자동으로 할당하는 방법은 무엇입니까?자동으로 기본 역할 할당

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

이 내가 할 것입니다 : 나는이 노력하고있어하지만 작동하지 않습니다와 나는 오류를 받고 있어요

씨는 처음부터 존재하므로 내 기본 역할 :

// 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"); 
} 

새로운 계정을 등록, I 오류 :

[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

잘못된 역할 관리자를 사용하고있는 것 같습니다. RolesSimple Membership 역할 공급자 일 가능성이 높으며 그 중 하나는 Identity입니다. 다음보십시오 : 당신은 그냥 사용자를 만든 경우가 IMO 필요하지 않는 한

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

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

은 내가 IsInRoleAsync -check에서 댓글을 달았습니다.

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

마법처럼 일했다 : 아직 수행하지 않으면

, 당신은 async/await 사용하는 비동기 작업을 작성해야합니다! 내 시드 방법이 잘못된 역할 관리자를 사용하고 있습니까, 아니면 그렇게 남겨 둘 수 있습니까? – user3231419

+1

@ user3231419 : 아니요, RoleManager 을 사용하고 있습니다. 따라서 올바른 역할을하는 'RoleManager '이 있습니다. 'Webpages_Roles' 테이블이 아닌 AspNetRoles 테이블에 나타나는 역할 ... – ChrFin

+0

사용에 약간의 문제가 있음을 발견했습니다. 이 방법 : 새 사용자를 등록한 후에 사용자는 데이터베이스의 "Member"-role에 할당되지만 아직 활성 사용자가 구성원인지 확인하는 _Layout.cshtml 페이지에는 지정되지 않습니다. 그것은 내가 로그 아웃하고 다시 로그인 할 때 사용자가 회원 역할을 가지고 있다는 것을 인식하고 무엇이 잘못되었는지를 알고 있습니까? – user3231419