Halo,
Tolong beritahu aku. Saya punya masalah.
Dengan permintaan login func, saya mendapatkan SMS dengan kode yang saya daftarkan di kredensial.kode = "121332".
Saya tidak dapat mengirim kode ini kembali. Bagaimana cara melakukannya? Apa yang saya lakukan salah?
Ini kode saya my
kelas 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)")
}
}
}
}
Anda perlu memindahkan credentials.code = "121332"
setelah pengendali otentikasi mengembalikan .failure(let error)
.
Melakukannya secara asinkron di dalam if error.requiresInstagramCode { }
mungkin merupakan pilihan yang baik.
Masalah masih ada
https://prnt.sc/pgyf15
rupanya tidak mengirim kode ini
Coba tanpa breakpoint. Karena dengan cara ini Anda sebenarnya menghentikan kode saat mencapai baris itu, sehingga tidak dapat menyebarkan permintaan apa pun saat credentials.code
berubah. :merah:
Jika masih tidak mengubah apa pun, coba pertahankan credentials
juga (walaupun itu seharusnya tidak menjadi masalah dari apa yang saya lihat dari cuplikan Anda, tbh).
https://prnt.sc/pgynah
Masalah masih ada. Saya ingin menarik perhatian Anda, saya memberikan kredensial ke .user, karena jika ada .credentials (seperti pada contoh), maka terjadi kesalahan
.user
adalah cara yang benar.
.credentials
digunakan di development
dan saya lupa mengubahnya. Terima kasih telah menunjukkan. Aku akan mengubahnya sekarang.
Saya masih tidak mendapatkan kesalahan karena saya mengujinya dengan cara saya dan semuanya berfungsi sebagaimana mestinya
Karena saya tidak dapat melihatnya di tangkapan layar terakhir Anda, apakah itu benar-benar tidak berfungsi dengan mempertahankan credentials
seperti itu, dan kemudian memperbarui code
setelah mengembalikan Error
membutuhkannya ?
Karena itu tampaknya satu-satunya hal yang Anda lakukan berbeda, tbh
Jika saya menggunakan .credentials, saya memiliki kesalahan ini https://prnt.sc/pgyvlx
Saya memposting semua kode saya di pesan utama.
Apakah saya melakukan sesuatu yang salah?
bagaimana Anda menguji mengirim pesan kembali?
.user
adalah yang benar, .credentials
tidak sengaja disimpan dalam dokumentasi.
Pindahkan deklarasi credentials
bawah handler
. Sebagai properti "ditahan".
Ini harus bekerja kemudian.
let handler = APIHandler()
let credentials = Credentials( … )
func login() {
…
}
itu semua kode, toh ada kesalahan (
impor UIKit
impor SwiftyInsta
kelas ViewController: UIViewController {
biarkan penangan = APIHandler()
kredensial var = Kredensial(nama pengguna: "nama pengguna", kata sandi: "kata sandi", verifikasiBy: .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)")
}
}
}
}
Dan apa kesalahan kali ini? @rmelnik7777
09-10-2019 17:32:25.333892+0300 TestInsta[9747:281440] [] nw_connection_receive_internal_block_invoke [C1] Menerima balasan gagal dengan kesalahan "Operasi dibatalkan"
Itu sebenarnya terlihat seperti semacam peringatan _Xcode_, bukan sesuatu yang dihasilkan SwiftyInsta
Saya memiliki masalah serupa. Tidak jelas bagaimana masuk ke blok kegagalan untuk mengatur kode otorisasi dari SMS. Bisakah Anda membantu dengan sebuah contoh?
Halo saya punya masalah yang sama juga. Bisakah Anda membagikan contoh aplikasi yang berfungsi untuk autentikasi dua faktor?
@sbertix akan segera memposting contoh yang jelas.
bersabarlah.
Maaf saya belum berhasil memposting contoh, saya benar-benar sibuk.
Saya harap saya bisa memposting satu segera.
Saya benar-benar baru dengan Swift tetapi mungkin saya menemukan bug:
Saya tidak memiliki kesempatan untuk menyelidikinya lebih lanjut tetapi mungkin juga demikian. Rupanya pada komit saat ini Credentials
dideklarasikan sebagai struct
dan bukan class
, yang merupakan premis dari semua referensi yang lewat.
Tampaknya itu adalah sesuatu yang saya perbaiki di sepanjang jalan dalam versi lokal saya, atau beberapa perubahan yang saya dorong ke master
sepanjang jalan, atau bahkan mungkin bukan masalah itu sendiri.
Saya akan mencoba meninjau semuanya untuk # 96, tetapi saya belum punya waktu akhir-akhir ini. Permintaan maaf.
@Lyusan
Komentar yang paling membantu
Maaf saya belum berhasil memposting contoh, saya benar-benar sibuk.
Saya harap saya bisa memposting satu segera.