2017-07-06 89 views
2

一個電話號碼,我無法弄清楚如何做一個電話號碼,確認在asp.net 1.1核心如何確認在ASP.Net核心1.1MVC

標識服務配置包含明確的選項,要求確認的電子郵件和/或電話號碼。

這是可以做到的方式如下:

services 
    .AddIdentity<User, Role>(options => 
    { 
     options.SignIn.RequireConfirmedEmail = true; 
     options.SignIn.RequireConfirmedPhoneNumber = true; 
    }); 

電子郵件的驗證是相當簡單的的UserManager包含明確的令牌生成和驗證:

var token = await _userManager.GenerateEmailConfirmationTokenAsync(user); 

生成的令牌可以通過以下方式驗證:

var result = await _userManager.ConfirmEmailAsync(user, code); 

上述行wi如果令牌有效,則將user.EmailConfirmed標誌切換爲true。

現在的問題是,我沒有看到類似的方法來生成手機驗證令牌及其等效方法來驗證它(反過來如果成功,應該將user.PhoneNumberConfirmed標誌切換爲true)。

用戶管理器包含但是一些方法做了用戶手機的變化:

_userManager.GenerateChangePhoneNumberTokenAsync(); 

_userManager.VerifyChangePhoneNumberTokenAsync(); 

但似乎這些方法不切換user.PhoneNumberConfirmed標誌。

我錯過了什麼嗎?確認用戶電話號碼的正確方法是什麼(換句話說,將user.PhoneNumberConfirmed設置爲true)?

+0

電話確認需要像twilio這樣的外部服務才能通過發送短信進行確認。我已經在我的項目中實現了這些東西https://github.com/joeaudette/cloudscribe –

+0

@JoeAudette嗯,我不知道如何提供確認碼,但是如何正確驗證它。你能指點我嗎,你在哪裏? –

+1

如果您看到[源代碼](https://github.com/aspnet/Identity/blob/rel/1.1.1/src/Microsoft.AspNetCore.Identity/UserManager.cs#L1518),唯一設置PhoneNumberConfirmed的地方爲真是在ChangePhoneNumberAsync(TUser用戶,字符串phoneNumber,字符串標記)' – tmg

回答

4

感謝@tmg將我指向源代碼。

根據它,正確的方法確實使用GenerateChangePhoneNumberTokenAsync以生成令牌和ChangePhoneNumberAsync到(如果驗證成功,進而設置PhoneNumberConfirmed爲true)驗證它:

var token = await _userManager 
    .GenerateChangePhoneNumberTokenAsync(user, user.PhoneNumber); 

var result = await _userManager 
    .ChangePhoneNumberAsync(user, user.PhoneNumber, token); 

備註 :在ASP.NET核心2.0.0,不幸的是,有一個bug(迴歸)和GenerateChangePhoneNumberTokenAsync不會再產生短信友好的象徵,是目前無用:

GenerateChangePhoneNumberTokenAsync is not generating an SMS-friendly token in ASP.NET Core 2.0

+1

OMG這個bug。一直在與我搞砸。 – Terrance00

+0

有關解決方法,請參閱https://stackoverflow.com/a/46078505/3146354 – jcemoller