Closed Nikaladze closed 10 years ago
@Nikaladze дело в том, что вызов метода clearCookies не влияет на текущего активного установленного пользователя [VKUser currentUser] Если вы явно после clearCookies запросите повторно авторизовать пользователя ваше приложение (отобразите UIWebView), то увидите страницу авторизации (ввод логина и пароля)
Спасибо за ответ @AndrewShmig Я так уже делал: после логаута записываю, что данный юзер вышел (UserDefaults) и просто отображаю страницу WebView при нажатии на кнопку, или есть какие-то методы в СДК, которые позволяют сделать подобную проверку?
@Nikaladze , добавил в текущую версию СДК метод deactivate в класс VKUser, который будет сбрасывать текущего активного пользователя. Можете теперь после очистки куков вызывать этот метод и после спрашивать авторизацию - должно работать как надо.
@Nikaladze когда проблема будет решена - сообщите, закрою репорт. Либо, если понадобится еще что-то добавить - пишите.
Спасибо @AndrewShmig После очистки куков я делаю деактивацию:
[[VKConnector sharedInstance] clearCookies];
if ([[VKUser currentUser] deactivate]) {
NSLog(@"All good");
} else {
NSLog(@"Can't deactivate");
}
В дебагере в методе деактивации на собственные глаза вижу, что
_currentUser VKUser * nil 0x00000000
Но потом когда запрашиваю
VKUser *currentUser = [VKUser currentUser];
То в дебагере вижу следующие поля:
v currentUser VKUser * 0x8b54cd0 0x08b54cd0
> NSObject NSObject
> _storageItem VKStorageItem * 0x8a64300 0x08a64300
> _accessToken VKAccessToken * nil 0x00000000
Если я хочу достучаться к accessToken, то он естественно мне выдает из storageItem:
(lldb) print currentUser.accessToken
2013-12-13 10:22:57.696 SimpleConnectTestServer[1551:70b] (137, VKUser, accessToken)
(VKAccessToken *) $0 = 0x08b69040
Суть в том, что он не пустой
То есть, если я очищаю куки, делаю деактивацию, а потом по старому методу нажимаю на кнопку ВКонтакте (так как написано в первом сообщение без запоминания состояния в дефолтах), то он мне выводит сообщение о выходе
@Nikaladze да уж, я ступил. Метод деактивации уберу вообще тогда, ибо нафиг нужен он.
А чтобы решить вашу "проблему", то надо либо очистить всё хранилище (если один пользователь всегда, то не проблема), либо удалить запись об авторизованном пользователе из хранилища.
По-правде вы сейчас затронули интересную проблему - проверка того, авторизован ли текущий пользователь или нет... надо подумать. Может у вас есть какие-то предложения, как это лучше сделать?
@Nikaladze написал метод logout, который полностью деавторизует текущего пользователя. Если вы работаете с только с одним пользователем всегда, то всё нормально и не стоит задаваться другими вопросами. Однако, если вы работаете с несколькими пользователями, метод [VKUser currentUser] после логаута пользователя будет возвращать произвольного пользователя из хранилища. Чтобы установить определенного пользователя из хранилища активным необходимо использовать метод activateUserWithID:.
Спасибо @AndrewShmig все работает прекрасно ;)
Добрый день!
У меня для входа и выхода одна кнопка Для выхода, в делегате UIAlertView и проверки на нажатую кнопку, делаю:
при этом в консоль честно выдает:
Потом нажимаю на кнопку ВКонтакте:
, а оно мне все равно выдает вопрос: "Вы действительно хотите выйти?" (хотя должно отобразится окно registrationVC) Тогда я перезапускаю приложение, нажимаю на кнопку - эффект тот же.
Помогите пожалуйста!