Question

I am trying to register a user to a role but i am getting the following error:

No user found was found that has the name "MyName"

I have created an MVC 4 Application using the default template.

I have created a custom membership provider and implemented the CreateUser method as follow

public User CreateUser(User i_userToCreate)
    {

        using (var _db = new Repository())
        {

           User _user = _db.CreateUser(i_userToCreate);
           MembershipUser _membershipUser = new MembershipUser(providerName: "ATWMembershipProvider",
           name: _user.UserName,
           providerUserKey: null,
           email: _user.Email,
           passwordQuestion: "",
           comment: "",
           isApproved: true,
           isLockedOut: false,
           creationDate: DateTime.UtcNow,
           lastLoginDate: DateTime.UtcNow,
           lastActivityDate: DateTime.UtcNow,
           lastPasswordChangedDate: DateTime.UtcNow,
           lastLockoutDate: DateTime.UtcNow);

           return _user;
        }

This is how i configured my web.config

<appSettings>
<add key="enableSimpleMembership" value="false"/>
<add key="autoFormsAuthentication" value="false"/>
</appSettings>
<system.web>
<membership defaultProvider="ATWMembershipProvider">
  <providers>
    <clear/>
    <add name="ATWMembershipProvider" type="AroundTheWorld.Infrastructure.ATWMembershipProvider"
         enablePasswordRetrieval="false"
         ConnetionStringName="Context"
         enablePasswordReset="true"
         requiresQuestionAndAnswer="false"
         equiresUniqueEmail="false"
         maxInvalidPasswordAttempts="5"
         minRequiredPasswordLength="6"
         minRequiredNonalphanumericCharacters="0"
         passwordAttemptWindow="10" applicationName="myApplication" />
  </providers>
</membership>
<roleManager enabled="true" defaultProvider="AspNetSqlRoleProvider">
  <providers>
    <remove name="AspNetSqlRoleProvider" />
    <add name="AspNetSqlRoleProvider" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
    <!-- note: WebMatrix registers SimpleRoleProvider with name
     'AspNetSqlRoleProvider'. I don't know why but i kept it. -->
  </providers>
</roleManager>

Now the authenticate method is as follow:

 var MembershipProvider = new ATWMembershipProvider();
            User authentictedUser = MembershipProvider.CreateUser(_userToCreate);

            FormsAuthentication.SetAuthCookie(authentictedUser.UserName, true);
            System.Web.Security.Roles.AddUserToRole(authentictedUser.UserName, authentictedUser.Role.Name);
            Session.Add("UserID", authentictedUser.ID);
            Session.Add("UserName", authentictedUser.UserName);

I have already checked the following:

  1. My User as all necessary information
  2. I have registered two roles in App_start "user" , "admin"

but i still getting an error that No user found was found that has the name "MyName"

In asp web form that wasn't necessary in order to secure a folder based on a role

All i am trying to do is to secure an action inside a controller to a specific "Role"

[Authorize(Roles = "admin")]
    public ActionResult GetAllLocations()
    {
        using (var _db = new Repository())
        {
            return View(_db.GetLocations());
        }
    }
Was it helpful?

Solution

I have fixed the problem...

The problem was because I implemented only a custom membership provider without a role provider.

I have followed this blog.

Basically I have created a class MyOwnRoleProvider which inherits from RoleProvider and:

  1. Implemented the method called GetRolesForUser
  2. Implemented the method called GetUsersInRole

finally I modified my web.config to

<roleManager defaultProvider="ATWRoleProvider" enabled="true" cacheRolesInCookie="true">
  <providers>
    <clear />
    <add name="ATWRoleProvider" type="AroundTheWorld.Infrastructure.ATWRoleProvider, AroundTheWorld" connectionStringName="Context" />
  </providers>
</roleManager>

after it I was able to use the following

[Authorize(Roles="admin")]
public ActionResult GetAllLocations()
{
  using (var _db = new Repository())
  {
    return View(_db.GetLocations());
  }
}

AND

@if (User.IsInRole("user"))

I hope it will be helpful for someone...

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top