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)")
}
}
}
}
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"
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:
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
Comentario más útil
Lo siento, no he logrado publicar un ejemplo todavía, he estado muy ocupado.
Espero poder publicar uno pronto.