你好,
请告诉我。 我有个问题。
通过 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)")
}
}
}
}
您需要在身份验证处理程序返回.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] 接收回复失败,错误“操作取消”
这实际上看起来像是某种 _Xcode_ 警告,而不是SwiftyInsta
生成的东西🤔
我有一个类似的问题。 目前尚不清楚如何进入故障块以设置短信的授权码。 你能帮忙举个例子吗?
你好我也有同样的问题。 你能分享一个两因素身份验证的工作示例应用程序吗?
@sbertix将很快发布一个清晰的示例。
要有耐心。
抱歉,我还没有设法发布示例,我真的很忙。
我希望我能尽快发布一个。
我没有机会进一步调查它,但它也可能是。 显然在当前提交Credentials
被声明为struct
而不是class
,这是所有通过引用传递的前提。
这显然是我在本地版本中沿途修复的东西,或者沿途我推送到master
一些更改,或者甚至可能不是问题本身。
我将尝试查看 #96 的所有内容,但最近我没有时间。 道歉。
@Lyusan
最有用的评论
抱歉,我还没有设法发布示例,我真的很忙。
我希望我能尽快发布一个。