Swiftyinsta: Renseignez-vous sur les informations d'identification.code

Créé le 9 oct. 2019  ·  19Commentaires  ·  Source: TheM4hd1/SwiftyInsta

Bonjour,
S'il vous plaît dites-moi. J'ai un problème.

Avec la demande dans func login, je reçois un SMS avec le code, que j'ai enregistré dans credentials.code = "121332".
Je ne peux pas renvoyer ce code. Comment faire? Qu'est-ce que je fais mal?

C'est mon code

classe ViewController : UIViewController {

let handler = APIHandler()    
override func viewDidLoad() {
    super.viewDidLoad()
    login()
}

func login() {
    var credentials = Credentials(username: "username", password: "password", verifyBy: .text)
    credentials.code = "121332"

    handler.authenticate(with: .user(credentials)) { [weak self] in
        switch $0 {
        case .success(let response, _):
            print("Login successful.")
            guard let key = response.persist() else { return print("`Authentication.Response` could not be persisted.") }
            UserDefaults.standard.set(key, forKey: "current.account")
            UserDefaults.standard.synchronize()

            self?.getCurrentUser()
        case .failure(let error):
            if error.requiresInstagramCode {
            } else {
            }
        }
    }
}

func getCurrentUser() {
    self.handler.users.user(.me) { ( result: Result<User?, Error>) in
        switch result {
        case .success(let user):
            let username = user?.name ?? "John Doe"
            print("success, username: \(username)")
        case .failure(let error):
            print("failure, error: \(error.localizedDescription)")
        }
    }
}

}

bug help wanted

Commentaire le plus utile

Désolé, je n'ai pas encore réussi à poster un exemple, j'ai été très occupé.
J'espère pouvoir en poster un bientôt.

Tous les 19 commentaires

Vous devez déplacer credentials.code = "121332" après que le gestionnaire d'authentification ait renvoyé .failure(let error) .
Le faire asynchrone dans le if error.requiresInstagramCode { } pourrait être une bonne option.

Le problème existe toujours
https://prnt.sc/pgyf15
apparemment n'envoie pas ce code

Essayez sans le point d'arrêt. Parce que de cette façon, vous arrêtez en fait le code lorsqu'il atteint cette ligne, il ne peut donc propager aucune requête lorsque credentials.code change. :rougir:
Si cela ne change toujours rien, essayez de conserver également credentials (même si cela ne devrait pas être un problème d'après ce que je peux voir dans votre extrait, à confirmer).

https://prnt.sc/pgynah
Le problème existe toujours. Je voudrais attirer votre attention, je passe les identifiants à .user, car s'il y a .credentials (comme dans l'exemple), alors une erreur se produit

.user est la bonne méthode.
.credentials été utilisé dans development et j'ai oublié de le changer. Merci de l'avoir signalé. Je vais le changer tout de suite.
Je n'obtiens toujours pas l'erreur car je le teste à ma façon et tout fonctionne comme prévu 🤔

Comme je ne le vois pas dans votre dernière capture d'écran, cela ne fonctionne-t-il vraiment pas avec la persistance du credentials cette façon, puis la mise code jour de Error nécessitant ?
Parce que cela semble être la seule chose que vous faites différemment, tbh

Si j'utilise .credentials, j'ai cette erreur https://prnt.sc/pgyvlx
J'ai posté tout mon code dans le message principal.
Est-ce que je fais quelque chose de mal?

comment testez-vous le renvoi d'un message ?

.user est le bon, .credentials été conservé dans la documentation par erreur.
Déplacez votre déclaration de credentials dessous de celle de handler . En tant que propriété "conservée".
Cela devrait fonctionner alors.

let handler = APIHandler()
let credentials = Credentials( … )

func login() {
  …
}

c'est tout le code, il y a quand même une erreur (

importer UIKit
importer SwiftyInsta

classe ViewController : UIViewController {
let gestionnaire = APIHandler()
var credentials = Credentials(nom d'utilisateur : "nom d'utilisateur", mot de passe : "mot de passe", verifyBy : .text)

override func viewDidLoad() {
    super.viewDidLoad()
    login()
}

func login() {

    handler.authenticate(with: .user(credentials)) { [weak self] in
        switch $0 {
        case .success(let response, _):
            print("Login successful.")
            guard let key = response.persist() else { return print("`Authentication.Response` could not be persisted.") }
            UserDefaults.standard.set(key, forKey: "current.account")
            UserDefaults.standard.synchronize()
            self?.getCurrentUser()
        case .failure(let error):
            if error.requiresInstagramCode {
                self!.credentials.code = "178063"
            } else {
            }
        }
    }
}

func getCurrentUser() {
    self.handler.users.user(.me) { ( result: Result<User?, Error>) in
        switch result {
        case .success(let user):
            let username = user?.name ?? "John Doe"
            print("success, username: \(username)")
        case .failure(let error):
            print("failure, error: \(error.localizedDescription)")
        }
    }
}

}

Et quelle est l'erreur cette fois ? @rmelnik7777

2019-10-09 17:32:25.333892+0300 TestInsta[9747:281440] [] nw_connection_receive_internal_block_invoke [C1] La réponse de réception a échoué avec l'erreur "Opération annulée"

https://prnt.sc/pgzldk

Cela ressemble en fait à une sorte d'avertissement _Xcode_, pas à quelque chose de SwiftyInsta généré 🤔

J'ai le même problème. Il n'est pas clair comment entrer dans le bloc d'échec pour définir un code d'autorisation à partir de SMS. Pouvez-vous aider avec un exemple?

Bonjour j'ai le même problème aussi. Pouvez-vous partager un exemple d'application pour l'authentification à deux facteurs ?

@sbertix publiera bientôt un exemple clair.
être patient.

Désolé, je n'ai pas encore réussi à poster un exemple, j'ai été très occupé.
J'espère pouvoir en poster un bientôt.

Je suis totalement nouveau avec swift mais j'ai peut-être trouvé le bug :

  • Ici , vous créez une copie modifiable de user (instance de Credentials ) et définissez la valeur de la propriété du gestionnaire.
  • Mais dans cette ligne , il s'agit de l'instance d'origine de Credentials , donc la valeur de la propriété handler n'est pas définie. La fonction authentification.code() n'est pas appelée.

Je n'ai pas eu l'occasion d'approfondir mes recherches, mais cela pourrait aussi bien l'être. Apparemment, sur le commit actuel, les Credentials sont déclarés comme struct et non comme class , ce qui était la prémisse de tout le passage par référence.
C'est apparemment quelque chose que j'ai soit corrigé en cours de route dans ma version locale, soit des modifications que j'ai apportées au master cours de route, ou peut-être même pas le problème en soi.
Je vais essayer de tout revoir pour le #96, mais je n'ai pas eu de temps ces derniers temps. Excuses.
@Lyusan

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

biox86 picture biox86  ·  12Commentaires

effecttwins picture effecttwins  ·  16Commentaires

anonrig picture anonrig  ·  3Commentaires

canaksoy picture canaksoy  ·  6Commentaires

sbertix picture sbertix  ·  3Commentaires