【问题标题】:OAuthWebSecurity.CreateOrUpdateAccount generates FOREIGN KEY constraint exceptionOAuthWebSecurity.CreateOrUpdateAccount 生成 FOREIGN KEY 约束异常
【发布时间】:2014-02-13 19:36:27
【问题描述】:

过去几个小时我一直在尝试在我的 MVC 4 网站中添加 facebook 登录。

到目前为止,“本地帐户注册”(WebSecurity.CreateAccount() 运行良好。

在我的业务逻辑中,我的代码如下所示:

public ValidationReturn<User> AddUser(User data, string provider, string providerUserId)
{
....

Repository.Insert(data);
SaveChanges();

OAuthWebSecurity.CreateOrUpdateAccount(provider, providerUserId, data.LoginName);

现在,当我尝试创建这样的帐户时,OAuthWebSecurity.CreateOrUpdateAccount 抛出异常:

INSERT 语句与 FOREIGN KEY 约束冲突 “FK_dbo.webpages_OAuthMembership_dbo.webpages_Membership_UserId”。这 数据库“Wims”、表“dbo.webpages_Membership”中发生冲突, “用户 ID”列。

我在我的 UserTable 中看到我的用户,并且我了解查看 db 方案为什么它会崩溃...但我不知道原因... OAuthWebSecurity.CreateOrUpdateAccount 是否应该在 pages_Membership 中创建记录?如果有,那密码呢?

我一直在网上查看几个这样的教程: http://www.asp.net/mvc/tutorials/mvc-4/using-oauth-providers-with-mvc,或http://www.asp.net/web-pages/tutorials/security/16-adding-security-and-membership 而且我看不到我在这里缺少什么......

感谢您的宝贵时间。

【问题讨论】:

    标签: c# asp.net-mvc oauth


    【解决方案1】:

    好的,我刚刚发现...我使用代码第一类来声明系统在初始化 simplemembership 时创建的表的结构...(因为我需要将角色放在一个对象中来管理它网站)

    示例:

       [Table("webpages_OAuthMembership")]
        public class OAuthMembership
        {
            [Key, Column(Order = 0), StringLength(30)]
            public string Provider { get; set; }
    
            [Key, Column(Order = 1), StringLength(100)]
            public string ProviderUserId { get; set; }
    
            public int UserId { get; set; }
    
            //[Column("UserId"), InverseProperty("OAuthMemberships")]
            //public Membership User { get; set; }
        }
    

    有些 FK 错了.. 耶稣....

    希望对大家有所帮助

    【讨论】:

      【解决方案2】:

      对我来说,我发现会员模型的代码在 OAuthMembership 上有一个外键,返回到 Membership 表。这是不正确的,因为您可以使用 OAuthMembership 登录,而无需本地成员资格记录。 我不得不注释掉以下几行:

      [Table("webpages_Membership")]
      public class Membership
      {
          public Membership()
          {
              Roles = new List<Role>();
              //OAuthMemberships = new List<OAuthMembership>();
          }
      
          [Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
          public int UserId { get; set; }
          public DateTime? CreateDate { get; set; }
          [StringLength(128)]
          public string ConfirmationToken { get; set; }
          public bool? IsConfirmed { get; set; }
          public DateTime? LastPasswordFailureDate { get; set; }
          public int PasswordFailuresSinceLastSuccess { get; set; }
          [Required, StringLength(128)]
          public string Password { get; set; }
          public DateTime? PasswordChangedDate { get; set; }
          [Required, StringLength(128)]
          public string PasswordSalt { get; set; }
          [StringLength(128)]
          public string PasswordVerificationToken { get; set; }
          public DateTime? PasswordVerificationTokenExpirationDate { get; set; }
      
          public ICollection<Role> Roles { get; set; }
      
          //[ForeignKey("UserId")]
          //public ICollection<OAuthMembership> OAuthMemberships { get; set; }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-20
        • 2023-03-22
        • 2016-11-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多