首先,您需要安裝以下的包之一:
接下來,你還應該安裝okland:accounts-phone包,以幫助通過電話號碼啓用登錄。他們的GitHub提供了易於遵循如何設置它的指示。
密碼
我會強烈建議用密碼創建用戶帳戶,與電話號碼一起,因爲它是一個很好的安全功能有,並且還需要在默認情況下流星帳戶包。
驗證過程
我會用服務器端流星方法是給一個例子,對於前端可以編寫相應的處理程序作出反應。
這個例子將使用HTTP包,在你的代碼中你可以修改它來包含像twilio-meteor這樣的其他包裝包,如果你願意的話。
第1步: 註冊用戶,併發送驗證短信。
createNewUser方法:
'createNewUser': function (password, phoneNumber) {
var min = 10000;
var max = 99999;
var random = Math.floor(Math.random() * (max - min + 1)) + min;
var verified = Meteor.users.find({username: phoneNumber}).fetch();
if (verified.length > 0) {
if (verified.length == 1 && verified[0].profile.isMobileVerified == 'NO') {
Meteor.users.remove({username: phoneNumber});
var user = {username: phoneNumber, password: password, profile: { randomSms: random, isMobileVerified: 'NO' }};
Meteor.call("sendSMS", random, phoneNumber);
Accounts.createUser(user);
return returnSuccess('Successfully created', phoneNumber);
} else {
return returnFaliure('Mobile number already exists', phoneNumber);
}
} else {
var user = {username: phoneNumber, password: password, profile: { randomSms: random, isMobileVerified: 'NO' }};
Meteor.call("sendSMS", random, phoneNumber);
Accounts.createUser(user);
return returnSuccess('Successfully created', phoneNumber);
}
},
sendSMS方法:
'sendSMS': function (code, mobile) {
console.log(mobile);
HTTP.call(
"POST",
'https://api.twilio.com/{yyyy-dd-mm}/Accounts/' +
'{TWILIO_APPKEY}' + '/SMS/Messages.json', {
params: {
From: '+11234567890',
To: mobile,
Body: "Greetings! Your OTP is " + code
},
auth: '{TWILIO_APPKEY}' + ':' + '{TWILIO_PASSWORD}'
},
// Print error or success to console
function (error) {
if (error) {
console.log(error);
}
else {
console.log('SMS sent successfully.');
}
}
);
}
步驟2: 向用戶進行驗證的代碼和由用戶檢查代碼輸入
個
verifySMS方法:
'verifySMS': function (code, userid) {
console.log(userid);
var sms = Meteor.users.findOne({username: userid}).profile.randomSms;
if (sms == code) {
Meteor.users.update({username: userid}, {
$set: {"profile.isMobileVerified": "YES", "profile.randomSms": "--"}
});
return returnSuccess("Yes");
} else {
return returnSuccess("No");
}
},
步驟3: 從你陣營碼處理,如果碼匹配,批准用戶,否則顯示適當的錯誤消息。
更新通過OP來處理特定的使用案例: (例指示作出反應代碼)
讓用戶通過登錄之前SMS OTP代碼每次驗證,您將需要使用sendSMS方法,每次用戶嘗試登錄時,都會在存儲的AuthCodes集合中更新它,每次驗證代碼並相應地處理大小寫。
反應表格: 您需要在反應的JSX代碼容器中呈現類似這樣的表單。
<form className="new-task" onSubmit={this.handleSubmit.bind(this)} >
<input
type="text"
ref="phoneNumberInput"
placeholder="Enter Phone Number"
/>
</form>
寫入陣營功能登錄用戶:
handleSubmit() {
event.preventDefault();
// Find the phone number field via the React ref
const phoneNumber = ReactDOM.findDOMNode(this.refs.phoneNumberInput).value.trim();
Meteor.call('sendAuthCode', Meteor.userId(), phoneNumber, function(error, result) {
// Show a popup to user that code has been sent
});
}
然後,類似於以上,創建另一種形式爲具有用戶輸入的代碼發送給他們,併發送到服務器以進行驗證,例如
handleAuthCheck() {
event.preventDefault();
// Find the phone number field via the React ref
const phoneNumber = ReactDOM.findDOMNode(this.refs.phoneNumberInput).value.trim();
const code = ReactDOM.findDOMNode(this.refs.codeInput).value.trim();
Meteor.call('verifyAuthCode', Meteor.userId(), phoneNumber, code, function(error, result) {
// handle result accordingly
// you need to decide how you are going to login user
// you can create a custom module for that if you need to
});
}
AuthCodes收藏: 您需要在文件中定義的收集和導出,以便它可以在需要的地方進口。
export const AuthCodes = new Mongo.Collection('authcodes');
流星服務器的方法:
發送短信:
'sendAuthCode': function(userId, phoneNumber) {
var min = 10000;
var max = 99999;
var code = Math.floor(Math.random() * (max - min + 1)) + min;
Meteor.call("sendSMS", code, phoneNumber);
AuthCodes.insert({
userId: userId,
phoneNumber: phoneNumber,
code: code
});
}
驗證碼:
'verifyAuthCode': function(userId, phoneNumber, code) {
var authCode = AuthCodes.findOne({ phoneNumber: phoneNumber, code: code }) // You can also add userId check for added verification
if(typeof authCode !== "undefined" && authCode) {
// verification passed
return true;
} else {
// verification failed
return false;
}
}
感謝您的回答!如果我正確理解你的代碼,我認爲這不是我正在尋找的東西。這個方法爲我提供了一種方法:1)用PhoneNumber,Password和boolean字段isVerified創建一個用戶。通過這些方法,我可以驗證用戶的號碼是否唯一一次 - 當此用戶有isVerified = false時。之後,用戶只能通過他的電話和密碼登錄我的網站。對不起,如果我不明白的話。但是我需要每次用戶想要登錄時發送短信 - >驗證代碼 - >用戶登錄。我該如何實現? –
okland/accounts-phone讓我有一種方法來創建一個電話號碼和密碼的用戶,然後驗證其號碼一次(第一次),然後該用戶必須通過其電話和密碼登錄。但我需要每次都通過新的短信代碼登錄。感謝您的幫助! –
在這種情況下,您可以每次用戶嘗試登錄時使用sendSMS方法,在存儲的randomNumbers集合中更新它,每次驗證代碼並相應地處理大小寫。這是否滿足用例? – ryder