ບົດຄວາມນີ້ເຮົາຈະມາລອງສ້າງ api ສົ່ງ sms otp ໄປຫາເບີໂທຜູ້ໃຊ້ໂດຍໃຊ້ twilio ໃນ go ມັນຈະມີວິທີການເຮັດແນວໃດໄປເບິ່ງກັນເລີຍ.
ກ່ອນອື່ນເຮັດລະບົບສົ່ງ otp ເພື່ອຫຍັງ: ຄືອົງກອນຕ່າງໆຈະຫາວິທີຈັດການເພື່ອຕ້ານໄພຄຸກຄາມໃຫ້ມີຊ່ອງໂຫວໜ້ອຍທີ່ສຸດເທົ່າທີຈະເຮັດໄດ້ເພື່ອຄວາມປອດໃຜຕໍ່ລະບົບຂອງຕົນເອງ. ສະນັ້ນການທີ່ຈະໃຫ້ຜູ້ໃຊ້ທົ່ວໄປມາໃຊ້ລະບົບດັ່ງກ່າວເຊັນ: login, register reset password...ອື່ນໆທີ່ມີເປັນຂໍ້ມູນສ່ວນຕົວແນ່ນອນວ່າກະຕ້ອງຫາວິທີຢືນຢັນຕົວຕົນເພື່ອຄວາມປອດໄພໃນລະດັບໜຶ່ງ
ຂັ້ນຕອນ
1/ ເຮົາຕ້ອງໄປສະໝັກ account ຂອງ twilio ສາມາດເຂົ້າໄປສະໝັກຕາມລິ້ງນີ້ເລີຍ www.twilio.com/try-twilio ຖ້າຍັງບໍ່ມີ account
2/ ຫລັງຈາກນັ້ນ login
ມັນຈະເຂົ້າໜ້າ www.console.twilio.com ເຂົາຈະໃຫ້ເຮົາສອງ key ຄື: Account SID ແລະ Auth Token ເຮົາຈະເອົາໄປໃສ່ເປັນ parameter config
3/ ສ້າງ service sms ໃຫ້ໄປຕັ້ງຄ່າຕາມຂັ້ນຕອນໃນຮູບທີ່ບອກໄວ້ເລີຍ
4/ ໃຫ້ສ້າງ service Friendly name ແມ່ນໃຫ້ຕັ້ງຊື່ sevice name ຂອງເຮົາຕົວຢ່າງໃນນີ້ເຮົາຕັ້ງຊື່ວ່າ OTP demo, Verification channels ແມ່ນໃຫ້ເຮົາຕິກເອົາ sms ເພາະວ່າເຮົາຈະສົ່ງຮູບແບບເປັນ sms, Notes ໃສ່ກໍໄດ້ບໍ່ໃສ່ກໍໄດ້ແລ້ວກົດ continue ໄດ້ເລີຍ
5/ ຫລັງຈາກທີ່ເຮົາສ້າງ service ສຳເລັດແລ້ວມັນຈະໃຫ້ key Service SID ເຮົາຈະເອົາໄປໃສ່ເປັນ parameter config, Code length ເປັນຈຳນວນຄວາມຍາວຂອງ code OTP ໂດຍປົກະຕິແມ່ນຈະເອົາຕາມຄ່າ default ຂອງມັນກົດ save ໄດ້ເລີຍ
ູ6/ ຕັ້ງຄ່າ SMS Geographic Permissions ເຊິ່ງຈະເປັນໂຕກຳນົດໂຊນປະເທດໃຫ້ເຮົາກັບໄປໜ້າ console ເລືອກ Vioce -> Settings -> Geo permissions ໃຫ້ເຮົາຄົ້ນຫາພິມຄຳວ່າ laos ມັນອອກມາໃຫ້ກໍຕິກເລືອກແລ້ວກົດ save ຖືວ່າສິ້ນສຸດການຕັ້ງຄ່າເທິ່ງ twilio
ຂັ້ນຕອນການສ້າງ api ໃນ Go ກັນແລ້ວໄປລຸຍກັນ
1/ ໃຫ້ເຮົາໄປສ້າງໂປເຈັກເກັບໄວຢູ່ໃສກໍໄດ້ໂດຍເປີດ terminal ໃສ່ຄຳສັ່ງ
mkdir go-otp && cd go-otp
ຕາມດ້ວຍການສ້າງ Go Modules ໂດຍໃສ່ຄຳສັ່ງ
go mod init {module_name}
2/ ເຮົາຈະໃສ່ echo framework www.echo.labstack.com ໃຫ້ເຮົາສ້າງຊື່ file main.go ໄວ້ເປົ່າໆ ແລະ install echo ໂດຍໃສ່ຄຳສັ່ງ
go get github.com/labstack/echo/v4
install twilio ໂດຍໃສ່ຄຳສັ່ງ
go get github.com/twilio/twilio-go
3/ install library ສຳລັບ config environment variable.
go get github.com/joho/godotenv
ສ້າງ file .env ໄວ້ໃນໂປເຈັກແລ້ວກຳນົດ key name config
TWILIO_ACCOUNT_SID=Your_accountSID
TWILIO_AUTH_TOKEN=Your_auth_Token
TWILIO_SERVICES_ID=Your_service_SID
ຸ4/ ສ້າງ service api ສົ່ງ sms OTP ກັນເລີຍ
package main
import (
"context"
"log"
"net/http"
"os"
"github.com/joho/godotenv"
"github.com/labstack/echo/v4"
"github.com/twilio/twilio-go"
twilioApi "github.com/twilio/twilio-go/rest/verify/v2"
)
func init() {
if err := godotenv.Load(".env"); err != nil {
log.Fatal("Error loading .env file")
}
}
func main() {
e := echo.New()
// Routes sendOTP
e.POST("/sendOTP", func(c echo.Context) error {
var body struct {
Phone string `json:"phone"`
}
if err := c.Bind(&body); err != nil {
return c.JSON(http.StatusBadRequest, err)
}
sid, err := sendOTP(c.Request().Context(), body.Phone)
if err != nil {
return c.JSON(http.StatusInternalServerError, err)
}
return c.JSON(http.StatusOK, echo.Map{
"sid": sid,
"msg": "OTP sent successfully",
})
})
e.Logger.Fatal(e.Start(":8080"))
}
// client is the Twilio client
var client *twilio.RestClient = twilio.NewRestClientWithParams(twilio.ClientParams{
Username: os.Getenv("TWILIO_ACCOUNT_SID"),
Password: os.Getenv("TWILIO_AUTH_TOKEN"),
})
// sendOTP sends OTP to the given phone number
func sendOTP(ctx context.Context, phone string) (string, error) {
params := &twilioApi.CreateVerificationParams{}
params.SetTo(phone)
params.SetChannel("sms")
resp, err := client.VerifyV2.CreateVerification(os.Getenv("TWILIO_SERVICE_ID"), params)
if err != nil {
return "", err
}
return *resp.Sid, nil
}
6/ ທົດສອບກັນໂດຍໃຊ້ insonia ຫລື ໃຜຈະໃຊ້ tools ໂຕອື່ນກະໄດ້ຄືກັນບໍ່ວ່າກັນ
localhost:8080/sendOTP ເບີໂທທີ່ສົ່ງໄປຈະຕ້ອງຂຶ້ນນຕົ້ນດ້ວຍ
{
"phone": "+85620xxxx"
}
ມັນຕອບກັບມາ status 200 ຖືວ່າສຳເລັດ
{
"msg": "OTP sent successfully",
"sid": "VE48ad8c7f47a15d9f4479d899305aaeef"
}
ແລ້ວເຮົາຈະຮູ້ໄດ້ແນວໃດວ່າມັນໄດ້ສົ່ງ sms otp ໄປຫາເບີໂທເຮົາແທ້ໄປກວດກັນ
ລືມບອກໄປວ່າໃນບົດຄວາມນີ້ເຮົາໃຊ້ account ຟີຣເຊິ່ງທາງ twilio ເຂົາຈະອະນຸຍາດໃຫ້ເຮົາໃຊ້ຟີຣປະມານໜຶ່ງເດືອນທີ່ສາມາດສົ່ງ sms ໄດ້ຖ້າເກີນໜຶ່ງເດືອນແມ່ນບໍ່ໄດ້ແລ້ວ ເຊິ່ງຂອງເຮົາກະໄດ້ໝົດອາຍຸຄືກັນ5555
ກະເລີຍໄດ້ໃຊ້ key account ໂຕທີ່ສະໝັກເສຍເງິນເຮົາບໍ່ສາມາດເປີດໃຫ້ເຫັນ title sms ໄດ້
ຖ້າໃຜທີ່ຍັງບໍ່ເຄີຍສະໝັກແລ້ວໄປສະໝັກແລ້ວເຮັດຕາມຂັ້ນຕອນຕັ້ງຄ່າຕາມທີ່ເຮົາບອກມາດ້ານເທິງແມ່ນສາມາດສົ່ງ sms ໄດ້ແນ່ນອນ
7/ ສ້າງ service api verify OTP
// Routes verifyOTP
e.POST("/verifyOTP", func(c echo.Context) error {
var body struct {
Phone string `json:"phone"`
Code string `json:"code"`
}
if err := c.Bind(&body); err != nil {
return c.JSON(http.StatusBadRequest, err)
}
if err := verifyOTP(c.Request().Context(), body.Phone, body.Code); err != nil {
return c.JSON(http.StatusInternalServerError, err)
}
return c.JSON(http.StatusOK, echo.Map{
"msg": "OTP verified successfully",
})
})
// verifyOTP verifies the given OTP
func verifyOTP(ctx context.Context, phone, code string) error {
params := &twilioApi.CreateVerificationCheckParams{}
params.SetTo(phone)
params.SetCode(code)
resp, err := client.VerifyV2.CreateVerificationCheck(os.Getenv("TWILIO_SERVICE_ID"), params)
if err != nil {
return err
}
if *resp.Status != "approved" {
return errors.New("invalid code")
}
return nil
}
8/ ສຸດທ້າຍຂໍທ້າຍສຸດດ້ວຍການທົດສອບ verify otp
{
"phone": "+85620xxxx,
"code": "143464"
}
ມັນຕອບກັບມາ status 200 ສະແດງວ່າ verify ຖືກຕ້ອງເຢ້ໆ5555
{
"msg": "OTP verified successfully"
}
ມາຮອດນີ້ຖືວ່າໄດ້ສຳເລັດແລ້ວກັບການສ້າງ API ສົ່ງ SMS OTP ແລະ Verify ໂດຍໃຊ້ Twilio ໃນ Go ແບບງ່າຍໆ
ຖ້າມີຂໍ້ຜິດພາດປະການໃດ ຫລື ມີສິ່ງໃດຢາກນຳແນະກໍແນະນຳໄດ້ເດີ້ ຜູ້ຂຽນເອງຫາກໍລອງໃຊ້
Top comments (0)