我想保存用戶沒有電子郵件,就像這樣:Asp.Net身份保存用戶沒有電子郵件
var user = new ApplicationUser { UserName = model.Name };
var result = await UserManager.CreateAsync(user);
但我得到錯誤「的電子郵件不能爲空或空」。有沒有解決方案?或者這是不可能的?
我想保存用戶沒有電子郵件,就像這樣:Asp.Net身份保存用戶沒有電子郵件
var user = new ApplicationUser { UserName = model.Name };
var result = await UserManager.CreateAsync(user);
但我得到錯誤「的電子郵件不能爲空或空」。有沒有解決方案?或者這是不可能的?
身份依賴於電子郵件,以此來重置用戶密碼。
然而,忽略電子郵件並不簡單,但有可能。你將需要實現Microsoft.AspNet.Identity.IIdentityValidator
接口忽略缺少電子郵件:
namespace Microsoft.AspNet.Identity
{
/// <summary>
/// Used to validate an item
///
/// </summary>
/// <typeparam name="T"/>
public interface IIdentityValidator<in T>
{
/// <summary>
/// Validate the item
///
/// </summary>
/// <param name="item"/>
/// <returns/>
Task<IdentityResult> ValidateAsync(T item);
}
}
然後在ApplicationUserManager
自己實現分配財產UserValidator
。
如果你真的需要這個,你可以通過反編譯Microsoft.AspNet.Identity.UserValidator
類並偷看到現有的源代碼並刪除電子郵件的cheecking得到UserValidator
的原始源代碼。
不過,我不知道如何框架的其餘部分將在沒有用戶的電子郵件的反應。可能你會在其他操作中遇到異常。
我知道這是老了,但我不同意接受的答案,因爲這個問題被標記爲asp.net身份-2。對於未來的讀者的利益,ASP.NET 2.0身份有一個非常簡單的解決這個問題:
public class ApplicationUserManager : UserManager<ApplicationUser>
{
...snip...
public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context)
{
var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<ApplicationDbContext>()));
manager.UserValidator = new UserValidator<ApplicationUser>(manager)
{
// This disables the validation check on email addresses
RequireUniqueEmail = false
};
...snip...
}
}
在UserValidator<TUser>
,該Task<IdentityResult> ValidateAsync(T item)
實現檢查此標誌,並確定它應該運行電子郵件驗證:
if (this.RequireUniqueEmail)
{
await this.ValidateEmail(item, list);
}
既然你要保存的用戶沒有電子郵件地址,這是你應該怎麼做。
注意:當不收集電子郵件地址,這應該只被使用。如果您想收集和驗證電子郵件地址,但在註冊期間將其設爲可選,則應使用自定義IIdentityValidator
。
ASP身份2.2可以在App_Start\IdentityConfig.cs
manager.UserValidator = new UserValidator<ApplicationUser>(manager)
{
AllowOnlyAlphanumericUserNames = false,
RequireUniqueEmail = false
};
其實有更好的方法來設置。在您需要忽略它時修改驗證,然後在完成時將其恢復。 (不要在這種情況下使用異步,因爲另一個線程可能需要更新(?))
// first create/update the identity!!!
user.PasswordHash = UserManager.PasswordHasher.HashPassword(model.Password); //hash and update directly
// alter
UserManager.UserValidator = new UserValidator<StoreUser>(UserManager)
{
AllowOnlyAlphanumericUserNames = false,
RequireUniqueEmail = false
};
var result = UserManager.Update(user);
// restore...
UserManager.UserValidator = new UserValidator<StoreUser>(UserManager)
{
AllowOnlyAlphanumericUserNames = false,
RequireUniqueEmail = true
};
加一個爲您的頭像。 ......當然是對這個問題的正確答案! :) –