As of April 12th, you must go to Progress SupportLink to create new support cases or to access existing cases. Please, bookmark the SupportLink URL and use the new portal to contact the support team.
I'm posting here as feedback for the Kinvey iOS dev team asking that the feature below be added as it's a scenario which doesn't appear to be covered by the SDK and to see if someone has a better solution.
Test case
- I have user who has created a new account.
- On Kinvey portal all new user accounts require email verification.
- The user received the email and deleted it without clicking the link to activate the account (or the user never received email for whatever reason).
- When that user tries to log in the an error of .unauthorized is received.
- In the description the error is " This app requires email address verification. Before performing any operations, please verify your email address by clicking the link sent to you upon signup.”
If I try to detect for the case above I have to look for the .unauthorized error. After I get that error I think have to look at the description string to see if it’s a bad username and password problem or if it’s a user who hasn’t clicked the link to authenticate the account.
This is a request to add a new “.unauthenticated” error to make it easy to check for the above condition. Below is a copy of code that I currently use to try and check and validate when the user tries to log in:
@IBAction func login(_ sender: AnyObject) {
if ((emailTextField.text?.characters.count)! == 0) || ((passwordTextField.text?.characters.count)! == 0) {
showAlert(withTitle: "Missing Info", message: "Please enter your email and password.")
} else {
// Convert user name to lowercase since Kinvey is doing case sensitive matching, which we don't want.
let userName = emailTextField.text!.lowercased()
if userName.isValidEmail() == true {
SVProgressHUD.show()
User.login(username: userName, password: passwordTextField.text!) { user, error in
showAlert(withTitle: "Email Invalid", message: "The email does not appear to be a valid email address. Please double check and try again.")
}
}
}
Best Answer
P
Pranav J
said
over 6 years ago
Xavier,
An unverified user is an unauthorized user. When "Email Verification" option is enabled, you will not be able to create a new user that does not have an email address. If you don't click on the link of verification, your user will be unverified. There is already a way to detect this. You can check the status of the email verification for a user using following code.
let user = Kinvey.sharedClient.activeUser
let status = user?.metadata?.emailVerification?.status
Also, you can manually initiate email verification process.
An unverified user is an unauthorized user. When "Email Verification" option is enabled, you will not be able to create a new user that does not have an email address. If you don't click on the link of verification, your user will be unverified. There is already a way to detect this. You can check the status of the email verification for a user using following code.
let user = Kinvey.sharedClient.activeUser
let status = user?.metadata?.emailVerification?.status
Also, you can manually initiate email verification process.
Hi Pranav. Thanks for your quick response. I already figured out how to do the check. The issue I was reporting is that one of the returned error values should explicitly state the problem. When you make a call you have a list of possible errors why the user could not log in and you have a switch statement to catch those errors, but this specific issue isn't covered with the returned error types and it's more work to implement. This really is more of a feature request for the team. Thx.
Xavier De Leon
I'm posting here as feedback for the Kinvey iOS dev team asking that the feature below be added as it's a scenario which doesn't appear to be covered by the SDK and to see if someone has a better solution.
Test case
- I have user who has created a new account.
- On Kinvey portal all new user accounts require email verification.
- The user received the email and deleted it without clicking the link to activate the account (or the user never received email for whatever reason).
- When that user tries to log in the an error of .unauthorized is received.
- In the description the error is " This app requires email address verification. Before performing any operations, please verify your email address by clicking the link sent to you upon signup.”
If I try to detect for the case above I have to look for the .unauthorized error. After I get that error I think have to look at the description string to see if it’s a bad username and password problem or if it’s a user who hasn’t clicked the link to authenticate the account.
This is a request to add a new “.unauthenticated” error to make it easy to check for the above condition. Below is a copy of code that I currently use to try and check and validate when the user tries to log in:
@IBAction func login(_ sender: AnyObject) {
if ((emailTextField.text?.characters.count)! == 0) || ((passwordTextField.text?.characters.count)! == 0) {
showAlert(withTitle: "Missing Info", message: "Please enter your email and password.")
} else {
// Convert user name to lowercase since Kinvey is doing case sensitive matching, which we don't want.
let userName = emailTextField.text!.lowercased()
if userName.isValidEmail() == true {
SVProgressHUD.show()
User.login(username: userName, password: passwordTextField.text!) { user, error in
SVProgressHUD.dismiss()
if let user = user as? ScoreBookUser {
self.userInfo = user
self.performSegue(withIdentifier: self.LoginSuccessSegueID, sender: nil)
} else if let kinveyError = error as? Kinvey.Error {
switch kinveyError {
case .methodNotAllowed:
print("methodNotAllowed")
case .dataLinkEntityNotFound:
print("dataLinkEntityNotFound")
case .unknownError:
print("unknownError")
// case .unauthorized
// print("unauthorized")
case .invalidOperation:
print("invalidOperation")
case .objectIdMissing:
print("objectIdMissing")
case .unknownJsonError:
print("unknownJsonError")
case .invalidResponse:
print("invalidResponse")
case .noActiveUser:
print("noActiveUser")
case .requestCancelled:
print("requestCancelled")
case .requestTimeout:
print("requestTimeout")
case .invalidDataStoreType:
print("invalidDataStoreType")
case .userWithoutEmailOrUsername:
print("userWithoutEmailOrUsername")
case .unauthorized(let response, let data, let error, let description):
print("Response: \(response)") //401 statusCode also included here
print("Data: \(String(data: data!, encoding: .utf8))")
print("Error: \(error)")
print("Description: \(description)")
default:
print("default")
print("\(error)")
}
}
}
} else {
showAlert(withTitle: "Email Invalid", message: "The email does not appear to be a valid email address. Please double check and try again.")
}
}
}
Xavier,
An unverified user is an unauthorized user. When "Email Verification" option is enabled, you will not be able to create a new user that does not have an email address. If you don't click on the link of verification, your user will be unverified. There is already a way to detect this. You can check the status of the email verification for a user using following code.
Also, you can manually initiate email verification process.
http://devcenter.kinvey.com/ios/guides/users#emailverificationworkflow
Thanks,
Pranav
Kinvey
- Oldest First
- Popular
- Newest First
Sorted by Oldest FirstPranav J
Xavier,
An unverified user is an unauthorized user. When "Email Verification" option is enabled, you will not be able to create a new user that does not have an email address. If you don't click on the link of verification, your user will be unverified. There is already a way to detect this. You can check the status of the email verification for a user using following code.
Also, you can manually initiate email verification process.
http://devcenter.kinvey.com/ios/guides/users#emailverificationworkflow
Thanks,
Pranav
Kinvey
Xavier De Leon
Hi Pranav. Thanks for your quick response. I already figured out how to do the check. The issue I was reporting is that one of the returned error values should explicitly state the problem. When you make a call you have a list of possible errors why the user could not log in and you have a switch statement to catch those errors, but this specific issue isn't covered with the returned error types and it's more work to implement. This really is more of a feature request for the team. Thx.
-
Why do I get "Undefined symbols" errors when building with KinveyKit?
-
How do I register push tokens?
-
When using social login, to perform a log-out, do I need to log out of the social network, Kinvey, o
-
How can I assign additional properties to users?
-
Does KinveyKit support 64-bit ARM devices, such as iPhone 5s?
-
Authorization Token Invalid or Expired
-
BOOL and how it is stored in the database.
-
Offline saving throwing errors
-
Custom endpoint not able to form request object
-
Security through business logic
See all 437 topics