- Redis
- Go 3
- gRPC
- REST api
First step
- Send
phone_number
(ex.79212345555) - Generate random code
- Save
phone_number:otp
inRedis
- Generate random
token
- Save
token:phone_number
inRedis
- Send back
token
Last step:
- Send
token + otp
(got from first step) - Fetch otp from redis:
token -> phone_number -> code
- Compare otp
- Send result to user (success:true/false)
go get https://github.com/a1k89/go-otp
OTP_PORT=8080 OTP_GRPC_PORT=3000 docker-compose build
OTP_PORT=8080 OTP_GRPC_PORT=3000 docker-compose up -d
- REDIS_HOST=localhost:6379
- TRANSPORT_CRED_LOGIN
- TRANSPORT_CRED_PASSWORD
- TRANSPORT_CRED_FROM=79211234567
- TRANSPORT_CRED_URL
- OTP=1111 # Only while debug
- First step:
Method: POST
URL: `/generate/`
Payload: {"phone_number":"<phone_number>"}
Response: {"token": "bla-bla-token"}
- Second step:
Method: POST
URL: `/verificate/`
Payload: {"token":"bla-bla-token", "otp": "1111"}
Response: {"status": true/false, "message":"success message"}
proto/otp.proto
syntax = "proto3";
package proto;
option go_package = "github.com/monkrus/grpc-from0;grpc_from0";
service Payload{
rpc Generate (PayloadGenerateRequest) returns (PayloadGenerateResponse){}
rpc Verificate (PayloadVerificateRequest) returns (PayloadVerificateResponse){}
}
message PayloadGenerateRequest {
string phone_number = 1;
}
message PayloadGenerateResponse {
string token = 1;
}
message PayloadVerificateRequest {
string token = 1;
string otp = 2;
}
message PayloadVerificateResponse {
bool success = 1;
string message = 2;
}
- Generate gRPC client (python/java/go and etc)
- Write gRPC client logic (using step2 above)