Je laisse l'utilisateur connecté en utilisant UserDefaults, mais parfois l'utilisateur est déconnecté sans raison. Quand j'ai débogué ce cas, j'ai trouvé que UserDefault est null!Swift 3 - UserDefaults effacé automatiquement sans raison
Remarque: Je n'efface pas les valeurs sauf si l'utilisateur appuie sur le bouton de déconnexion.
Edit:
Voici un code:
Lorsque l'utilisateur se connecte à, j'enregistrer le jeton à l'aide:
UserDefaults.standard.set("Bearer \(actualJson["access_token"].stringValue)", forKey: "access_token")
UserDefaults.standard.set("\(actualJson["refresh_token"].stringValue)", forKey: "refresh_token")
UserDefaults.standard.synchronize()
Chaque fois que je reçois 401 erreur de serveur (jeton expire) J'en obtiens de nouveaux en utilisant le refresh_token:
AccountService.refreshToken(refreshToken: UserDefaults.standard.object(forKey: "refresh_token") != nil ? UserDefaults.standard.string(forKey: "refresh_token")! : "", callback: { (json) in
// set user defaults
UserDefaults.standard.set("Bearer \(json["access_token"].stringValue)", forKey: "access_token")
UserDefaults.standard.set("\(json["refresh_token"].stringValue)", forKey: "refresh_token")
UserDefaults.standard.synchronize()
})
Dans AppDelegate méthode didFinishLaunchingWithOptions:
if UserDefaults.standard.object(forKey: "access_token") != nil && UserDefaults.standard.string(forKey: "refresh_token") != "" {
// go to home
}
Dans le code précédent, UserDefaults.standard.string(forKey: "refresh_token")
est nulle. Bien que je suis sûr que je n'ai pas effacé la valeur
Vous ne pouvez rien faire sans avoir vu de code. Vérifiez si vous avez ajouté du code pour effacer userdefaults dans appdelegate ou dans d'autres fichiers. –
@DSDharma J'ai mis à jour la question – nouf
Peut-être que le résultat du serveur n'est pas bon lorsque vous rafraîchissez le jeton, comme 'json [" refresh_token "]. StringValue' est nul. –