Swiftyinsta: Pregunte acerca de credentials.code

Creado en 9 oct. 2019  ·  19Comentarios  ·  Fuente: TheM4hd1/SwiftyInsta

Hola,
Por favor dime. Tengo un problema.

Con solicitud en func login, recibo un SMS con el código que registré en credentials.code = "121332".
No puedo devolver este código. ¿Cómo hacerlo? ¿Qué estoy haciendo mal?

Este es mi codigo

clase 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

Comentario más útil

Lo siento, no he logrado publicar un ejemplo todavía, he estado muy ocupado.
Espero poder publicar uno pronto.

Todos 19 comentarios

Debe mover credentials.code = "121332" después de que el controlador de autenticación devuelva .failure(let error) .
Hacerlo de forma asincrónica dentro de if error.requiresInstagramCode { } podría ser una buena opción.

El problema aún existe
https://prnt.sc/pgyf15
aparentemente no envía este código

Prueba sin el punto de interrupción. Porque de esta manera está deteniendo el código cuando llega a esa fila, por lo que no puede propagar ninguna solicitud como credentials.code cambios. :rubor:
Si aún no cambia nada, intente retener credentials también (aunque no debería ser un problema por lo que puedo ver en su fragmento, tbh).

https://prnt.sc/pgynah
El problema aún existe. Me gustaría llamar su atención, paso las credenciales a .user, porque si hay .credentials (como en el ejemplo), entonces ocurre un error

.user es la forma correcta.
.credentials se usó en development y olvidé cambiarlo. Gracias por señalar. Lo cambiaré ahora mismo.
Sin embargo, todavía no obtengo el error porque lo estoy probando a mi manera y todo funciona según lo previsto 🤔

Como no puedo verlo en su última captura de pantalla, ¿realmente no funciona persistiendo el credentials esa manera, y luego actualizando code después de que devuelve el Error que lo requiere? ?
Porque eso parece ser lo único que estás haciendo diferente, tbh 😞

Si usamos credenciales, tengo este error https://prnt.sc/pgyvlx
Publiqué todo mi código en el mensaje principal.
¿Estoy haciendo algo mal?

¿Cómo se prueba el envío de un mensaje?

.user es el correcto, .credentials se guardó en la documentación por error.
Mueva su declaración de credentials debajo del handler uno. Como propiedad "retenida".
Entonces debería funcionar.

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

func login() {
  …
}

todo es código, hay un error de todos modos (

importar UIKit
importar SwiftyInsta

clase ViewController: UIViewController {
dejar handler = APIHandler ()
var credentials = Credentials (nombre de usuario: "nombre de usuario", contraseña: "contraseña", 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)")
        }
    }
}

}

¿Y cuál es el error esta vez? @ rmelnik7777

2019-10-09 17: 32: 25.333892 + 0300 TestInsta [9747: 281440] [] nw_connection_receive_internal_block_invoke [C1] Error al recibir respuesta con el error "Operación cancelada"

https://prnt.sc/pgzldk

Eso en realidad parece una especie de advertencia de _Xcode_, no algo SwiftyInsta generado 🤔

Tengo un problema similar. No está claro cómo ingresar al bloque de fallas para establecer un código de autorización desde SMS. ¿Puedes ayudar con un ejemplo?

Hola, yo también tengo el mismo problema. ¿Puede compartir una aplicación de muestra funcional para la autenticación de dos factores?

@sbertix publicará pronto un claro ejemplo.
ser paciente.

Lo siento, no he logrado publicar un ejemplo todavía, he estado muy ocupado.
Espero poder publicar uno pronto.

Soy totalmente nuevo con Swift, pero tal vez encontré el error:

  • Aquí , crea una copia mutable de user (instancia de Credentials ) y establece el valor de la propiedad del controlador.
  • Pero en esta línea , es la instancia original de Credentials , por lo que el valor de la propiedad handler no está establecido. No se llama a la función authentification.code() .

No tuve la oportunidad de investigarlo más a fondo, pero bien podría serlo. Aparentemente, en la confirmación actual, Credentials se declaran como struct y no class , que era la premisa de todo el paso por referencia.
Aparentemente, es algo que solucioné en el camino en mi versión local, o algunos cambios que presioné en master en el camino, o posiblemente ni siquiera el problema per se.
Intentaré revisar todo para el n. ° 96, pero últimamente no he tenido tiempo. Disculpas.
@Lyusan

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

sbertix picture sbertix  ·  3Comentarios

effecttwins picture effecttwins  ·  16Comentarios

reefer picture reefer  ·  18Comentarios

sbertix picture sbertix  ·  27Comentarios

biox86 picture biox86  ·  12Comentarios