Swiftyinsta: 询问credentials.code

创建于 2019-10-09  ·  19评论  ·  资料来源: TheM4hd1/SwiftyInsta

你好,
请告诉我。 我有个问题。

通过 func login 中的请求,我收到一条包含代码的 SMS,我在credentials.code = "121332" 中注册了该代码。
我无法发回此代码。 怎么做? 我究竟做错了什么?

这是我的代码

类视图控制器: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

最有用的评论

抱歉,我还没有设法发布示例,我真的很忙。
我希望我能尽快发布一个。

所有19条评论

您需要在身份验证处理程序返回.failure(let error)后移动credentials.code = "121332" .failure(let error)
if error.requiresInstagramCode { }异步执行可能是一个不错的选择。

问题依然存在
https://prnt.sc/pgyf15
显然不发送此代码

不带断点试试。 因为这样你实际上是在代码到达该行时停止它,所以它不能在credentials.code更改时传播任何请求。 :脸红:
如果它仍然没有改变任何东西,也尝试保留credentials (尽管从我从您的片段中看到的内容来看,这应该不是问题,tbh)。

https://prnt.sc/pgynah
问题依然存在。 我想提请您注意,我将凭据传递给 .user,因为如果有 .credentials(如示例中所示),则会发生错误

.user是正确的方法。
.credentials用于development ,我忘记更改它了。 谢谢指出。 我马上改。
我仍然没有收到错误消息,因为我正在按照自己的方式测试它并且一切都按预期工作 🤔

因为我在你的最后一张截图中看不到它,它真的不能以这种方式持久化credentials ,然后在它返回需要它的Error之后更新code ?
因为这似乎是你做的唯一不同的事情,tbh 😞

如果我使用 .credentials,则会出现此错误https://prnt.sc/pgyvlx
我在主消息中发布了我所有的代码。
难道我做错了什么?

你如何测试发回消息?

.user是正确的, .credentials被错误地保存在文档中。
将您的声明credentials低于handler之一。 作为“保留”财产。
它应该工作。

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

func login() {
  …
}

它的所有代码,反正有一个错误(

导入 UIKit
导入 SwiftyInsta

类视图控制器:UIViewController {
让处理程序 = APIHandler()
var 凭据 = 凭据(用户名:“用户名”,密码:“密码”,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)")
        }
    }
}

}

这次的错误是什么? @rmelnik7777

2019-10-09 17:32:25.333892+0300 TestInsta[9747:281440] [] nw_connection_receive_internal_block_invoke [C1] 接收回复失败,错误“操作取消”

https://prnt.sc/pgzldk

这实际上看起来像是某种 _Xcode_ 警告,而不是SwiftyInsta生成的东西🤔

我有一个类似的问题。 目前尚不清楚如何进入故障块以设置短信的授权码。 你能帮忙举个例子吗?

你好我也有同样的问题。 你能分享一个两因素身份验证的工作示例应用程序吗?

@sbertix将很快发布一个清晰的示例。
要有耐心。

抱歉,我还没有设法发布示例,我真的很忙。
我希望我能尽快发布一个。

我对 swift 完全陌生,但也许我发现了错误:

  • 在这里,您创建userCredentials实例)的可变副本并设置处理程序属性的值。
  • 但是在这一行中,它是Credentials的原始实例,因此未设置handler属性的值。 不调用authentification.code()函数。

我没有机会进一步调查它,但它也可能是。 显然在当前提交Credentials被声明为struct而不是class ,这是所有通过引用传递的前提。
这显然是我在本地版本中沿途修复的东西,或者沿途我推送到master一些更改,或者甚至可能不是问题本身。
我将尝试查看 #96 的所有内容,但最近我没有时间。 道歉。
@Lyusan

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

anonrig picture anonrig  ·  3评论

trentona picture trentona  ·  3评论

reefer picture reefer  ·  18评论

canaksoy picture canaksoy  ·  6评论

effecttwins picture effecttwins  ·  16评论