0

私はGuidキーで動作するようにASP Identity 2.0をカスタマイズしようとしています。私はa-okでログインできますが、ユーザーデータを取得しようとするといくつかの問題があります。User.Identity.GetUserId()&& User.IsInRole( "rolename")Not Working

いずれもこれらの作業:

User.Identity.GetUserId()

User.Identity.Nameは人口である[いつものようにfalseを返す]

User.IsInRole("rolename") [常に空の文字列として返し]。

マイログインハンドラ

public class CommandHandler : IRequestHandler<ViewModel, Result> 
{ 
    private readonly GuidUserManager _manager; 

    public CommandHandler(GuidUserManager manager) 
    { 
     _manager = manager; 
    } 

    public Result Handle(ViewModel criteria) 
    { 
     // Verify if a user exists with the provided identity information 
     var user = _manager.Find(criteria.UserName, criteria.Password); 

     // If a user was found 
     if (user == null) 
      return Result.Fail("Invalid username or password."); 

     // Clear any lingering authencation data 
     FormsAuthentication.SignOut(); 

     // Write the authentication cookie 
     FormsAuthentication.SetAuthCookie(user.UserName, criteria.RememberMe); 

     return Result.Ok(); 
    } 
} 

私のアイデンティティコード

using System; 
using System.Data.Entity; 
using System.Threading.Tasks; 
using Microsoft.AspNet.Identity; 
using Microsoft.AspNet.Identity.EntityFramework; 

namespace FM.Web.Security 
{ 
    public class GuidUserDbContext : IdentityDbContext<GuidUser, GuidRole, Guid, GuidUserLogin, GuidUserRole, GuidUserClaim> 
    { 
     public GuidUserDbContext(string connection) 
      : base(connection) 
     { 
      Database.SetInitializer(new GuidUserDbContextInitialilser()); 
     } 
    } 

    public class GuidUserDbContextInitialilser : CreateDatabaseIfNotExists<GuidUserDbContext> 
    { 
    } 

    public class GuidUserManager : UserManager<GuidUser, Guid> 
    { 
     public GuidUserManager(GuidUserStore userStore) 
      : base(userStore) 
     { 

     } 
    } 

    public class GuidUserLogin : IdentityUserLogin<Guid> 
    { 
    } 

    public class GuidUserRole : IdentityUserRole<Guid> 
    { 
    } 

    public class GuidUserClaim : IdentityUserClaim<Guid> 
    { 
    } 

    public class GuidRole : IdentityRole<Guid, GuidUserRole> 
    { 
    } 

    public class GuidUserStore : UserStore<GuidUser, GuidRole, Guid, GuidUserLogin, GuidUserRole, GuidUserClaim> 
    { 
     public GuidUserStore(DbContext context) 
      : base(context) 
     { 
     } 
    } 

    public class GuidRoleStore : RoleStore<GuidRole, Guid, GuidUserRole> 
    { 
     public GuidRoleStore(DbContext context) 
      : base(context) 
     { 
     } 
    } 

    public class GuidUser : IdentityUser<Guid, GuidUserLogin, GuidUserRole, GuidUserClaim> 
    { 
    } 
} 

答えて

1

あなたはAccountController

public GuidUserManager UserManager 
{ 
    get 
    { 
     return _userManager ?? HttpContext.GetOwinContext().GetUserManager<GuidUserManager>(); 
    } 
    private set 
    { 
     _userManager = value; 
    } 
} 
+1

実際には必須ではありません。たぶん彼は自分のIoCコンテナにGuidUserManagerを登録しており、その場合コンストラクタに注入されるでしょう。 –

0

FormsAuthenticationでこのコードは、あなたの問題である必要があります。おそらくあなたのweb.configには、に関連するエントリが含まれています。そのエントリはUser.IsInRoleです。 FormsAuthenticationに関連するすべてのコード/構成を削除して問題を解決してください。

これも参照してくださいanswer