alisha
05/17/2022, 9:46 AMrp
05/17/2022, 9:48 AMalisha
05/17/2022, 9:48 AMrp
05/17/2022, 9:51 AMgo
func main() {
passwordless.Init(plessmodels.TypeInput{
Override: &plessmodels.OverrideStruct{
APIs: func(originalImplementation plessmodels.APIInterface) plessmodels.APIInterface {
originalCreateCodePOST := *originalImplementation.CreateCodePOST
(*originalImplementation.CreateCodePOST) = func(email, phoneNumber *string, options plessmodels.APIOptions, userContext supertokens.UserContext) (plessmodels.CreateCodePOSTResponse, error) {
resp, err := originalCreateCodePOST(email, phoneNumber, options, userContext)
if err != nil {
// this is usually some 500 error like core connection issues..
return plessmodels.CreateCodePOSTResponse{}, err
}
if resp.GeneralError != nil {
// this is usually some custom error message which will be displayed
// on the frontend
return resp, err
}
// code creation was successful
return resp, err
}
return originalImplementation
},
},
})
}
if
conditions, you can do whatever you like. You can even send a response to the client directly (using options.Res
).alisha
05/17/2022, 9:55 AMrp
05/17/2022, 10:05 AMalisha
05/17/2022, 10:25 AM{
"message": "Phone number is invalid",
"status": "GENERAL_ERROR"
}
rp
05/17/2022, 10:28 AMValidatePhoneNumber
function in the init call yourself: https://pkg.go.dev/github.com/supertokens/supertokens-golang@v0.6.0/recipe/passwordless/plessmodels#ContactMethodPhoneConfigalisha
05/17/2022, 10:29 AMalisha
05/17/2022, 10:30 AMrp
05/17/2022, 10:33 AMalisha
05/17/2022, 10:35 AMrp
05/17/2022, 10:35 AMalisha
05/17/2022, 10:35 AMrp
05/17/2022, 10:36 AMalisha
05/17/2022, 10:36 AMrp
05/18/2022, 11:14 AMalisha
05/18/2022, 11:16 AMrp
05/18/2022, 11:19 AMalisha
05/18/2022, 11:19 AMalisha
05/18/2022, 11:26 AM(*originalImplementation.CreateCodePOST) = func(email *string, phoneNumber *string, optionsCreateCode plessmodels.APIOptions, userContextCreateCode supertokens.UserContext) (plessmodels.CreateCodePOSTResponse, error) {
err := validatePhone(*phoneNumber)
if err != nil {
responseJson := map[string]interface{}{
"message": err,
}
bytes, _ := json.Marshal(responseJson)
optionsCreateCode.Res.Header().Set("Content-Type", "application/json")
optionsCreateCode.Res.WriteHeader(400)
optionsCreateCode.Res.Write(bytes)
return plessmodels.CreateCodePOSTResponse{}, nil
}
return originalCreateCodePOST(email, phoneNumber, optionsCreateCode, userContextCreateCode)
}
rp
05/19/2022, 10:44 AMalisha
05/19/2022, 10:56 AMrp
05/19/2022, 11:59 AMsattvikc
05/19/2022, 12:04 PMoriginalCreateCodePOST = *originalImplementation.CreateCodePOST
newCreateCodePOST = func(email *string, phoneNumber *string, optionsCreateCode plessmodels.APIOptions, userContextCreateCode supertokens.UserContext) (plessmodels.CreateCodePOSTResponse, error) {
err := validatePhone(*phoneNumber)
if err != nil {
responseJson := map[string]interface{}{
"message": err,
}
bytes, _ := json.Marshal(responseJson)
optionsCreateCode.Res.Header().Set("Content-Type", "application/json")
optionsCreateCode.Res.WriteHeader(400)
optionsCreateCode.Res.Write(bytes)
return plessmodels.CreateCodePOSTResponse{}, nil
}
return originalCreateCodePOST(email, phoneNumber, optionsCreateCode, userContextCreateCode)
}
originalImplementation.CreateCodePOST = &newCreateCodePOST
rp
05/19/2022, 12:14 PMoriginalCreateCodePOST
won't be called at all anywaysattvikc
05/19/2022, 12:15 PMrp
05/19/2022, 12:15 PMalisha
05/19/2022, 12:32 PMsattvikc
05/19/2022, 12:53 PM(*originalImplementation.CreateCodePOST) = func(email *string, phoneNumber *string, optionsCreateCode plessmodels.APIOptions, userContextCreateCode supertokens.UserContext) (plessmodels.CreateCodePOSTResponse, error) {
err := validatePhone(*phoneNumber)
if err != nil {
responseJson := map[string]interface{}{
"message": err.Error(),
}
bytes, _ := json.Marshal(responseJson)
optionsCreateCode.Res.Header().Set("Content-Type", "application/json")
optionsCreateCode.Res.WriteHeader(400)
optionsCreateCode.Res.Write(bytes)
return plessmodels.CreateCodePOSTResponse{
OK: &struct {
DeviceID string
PreAuthSessionID string
FlowType string
}{},
}, nil
}
return originalCreateCodePOST(email, phoneNumber, optionsCreateCode, userContextCreateCode)
}
return originalImplementation
alisha
05/19/2022, 2:48 PMrp
05/19/2022, 2:49 PMalisha
05/19/2022, 2:50 PMrp
05/19/2022, 2:52 PMfmt.Println("inside override")
is not actually inside the override. To put it in the override, you would have to put it before err := validatePhone(*phoneNumber)
lineerr := validatePhone(*phoneNumber)
and see if it gets printed out when you call the API?alisha
05/19/2022, 2:53 PMrp
05/19/2022, 2:53 PMalisha
05/19/2022, 2:54 PMrp
05/19/2022, 2:54 PMalisha
05/19/2022, 2:55 PM{
"message": "Phone number is invalid",
"status": "GENERAL_ERROR"
}
rp
05/19/2022, 2:55 PMalisha
05/19/2022, 2:56 PMrp
05/19/2022, 2:56 PMContactMethodPhone
?alisha
05/19/2022, 2:56 PMrp
05/19/2022, 2:57 PMgo
ContactMethodPhone: plessmodels.ContactMethodPhoneConfig{
ValidatePhoneNumber: func(phoneNumber interface{}) *string {
return nil
},
},
alisha
05/19/2022, 2:58 PMrp
05/19/2022, 2:59 PMalisha
05/19/2022, 2:59 PMHeaders were already written. Wanted to override status code 200 with 500
rp
05/25/2022, 8:05 AMsattvikc
05/25/2022, 8:08 AMrp
05/25/2022, 8:10 AMsattvikc
05/25/2022, 8:13 AMalisha
05/25/2022, 10:25 AMsattvikc
05/25/2022, 10:25 AMalisha
05/25/2022, 10:27 AMsattvikc
05/25/2022, 10:30 AMalisha
05/25/2022, 11:28 AMrp
05/26/2022, 10:05 AMalisha
05/26/2022, 10:18 AM