我在过去几个小时里一直试图在我的MVC 4网站上添加facebook登录。
到目前为止,“本地帐户注册”(WebSecurity.CreateAccount()工作正常。
在我的businesslogic中,我的代码如下所示:
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”中发生冲突, 列'UserId'。
我在UserTable中看到了我的用户,并且我理解为了查看db方案崩溃的原因......但我不知道原因是... OAuthWebSecurity.CreateOrUpdateAccount应该在webpages_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 我不知道我在这里缺少什么...
感谢您的时间。
答案 0 :(得分:0)
好的,我刚刚发现...我使用代码第一类来声明系统在初始化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错了.. 耶稣....
希望它会帮助某人
答案 1 :(得分:0)
对我来说,我发现我对会员模型的代码在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; }
}