Содержание
Как выйти из ВКонтакте?
Когда необходимо выходить из своего аккаунта в ВК? Например, если вы хотите зайти на сайт под другим своим профилем или, скажем, пришли в гости к своим друзьям и решили зайти на сайт под своим именем, а для того, что бы больше никто не смог зайти ним, нужно обязательно выйти из аккаунта. Сегодня мы поговорим о том, как это сделать в самых различных ситуациях.
Вряд ли вы не знаете, что для того, что бы выйти из аккаунта на компьютере, нужно нажать на кнопочку «Выйти», что расположена в правой верхней части экрана. Выглядит она вот таким образом:
Часто проблема заключается в том, что, нажав на эту кнопку, вообще ничего не происходит, в результате чего пользователь не понимает, что ему необходимо сделать. Действительно, такая проблема существует, причем не только ВКонтакте, но и ряде других интернет-проектов. С чем это связано, сказать сложно, поскольку нужно рассматривать каждый случай отдельно, но в любом случае проблема кроется в браузере, а потому мы расскажем о том, как решить данный вопрос.
Есть два способа. Так, вы можете попросту воспользоваться другим браузером для входа в еще один свой аккаунт. А вот если вы хотите использовать только этот браузер, тогда желательно почистить куки и кэш. Как это сделать? Очень просто: нажмите на клавиши CTRL+SHIFT+DELETE и откроется окно (этот способ работает для Google Chrome и Mozilla Firefox, вероятно, работает и для Opera). Поставьте галочки напротив пунктов «Кэш» и «Куки», а в верхней части окна выберите «Все». Затем нажмите «Удалить сейчас» и подождите, пока будут удалены все данные, это может занять некоторое время. Обратите внимание, что в этом случае происходит деавторизация во всех аккаунтах, где вы прежде прошли авторизацию. После данной процедуры проблем с выходом из аккаунта ВК быть не должно.
Этот способ подойдет тем пользователям, которые могли заметить подозрительную активность в своем аккаунте. Например, посторонний ip-адрес. В таком случае нужно не только завершить сеанс на всех устройствах, но и поменять пароль в аккаунте.
Что бы завершить все сеансы, зайдите в «Мои настройки».
Выберите вкладку «Безопасность» и пункт «История активности».
Здесь вы увидите ссылку «Завершить все сеансы», на которую вам и следует нажать. В таком случае произойдет выход из аккаунта на все устройствах, кроме того, что вы используете сейчас.
Нажав на ссылку «Показать историю активности», вы сможете увидеть, когда вы (или злоумышленник) заходили в аккаунт и с какого ip-адреса.
Если вы используете мобильное устройство на базе операционной системы Андроид или iOS, значит, вы наверняка пользуетесь мобильным приложением ВК. Выйти из него проще простого.
В первую очередь заходим в «Настройки».
В нижней части открывшейся страницы видим кнопку «Выйти». Нажимаем на нее и происходит деавторизация.
Собственно, на этом весь процесс окончен.
После логаута пользователя VK можно получить управление его страницей / Хабр
Решил попробовать себя в работе с API Вконтакте и наткнулся на интересную особенность.
Один из способов авторизации в API — это OAuth. Вкратце всё происходит так: создаёте приложение ВК, получаете его ID, а затем отправляете браузер пользователя на адрес:
https://oauth.vk.com/authorize" + "?client_id=123" // ID вашего приложения + "&display=page" + "&redirect_uri=https://oauth.vk.com/blank.html" // URL, на который попадёт пользователь после успешной авторизации. ВК требует указания этого сайта в настройках приложения и только для приложения типа Сайт. Для остальных работает только указанный УРЛ, в целях безопасности + "&scope= права доступа" + "&response_type=token" + "&v=5.52" + "&state=123456"
Это авторизация методом Implicit flow.
Если пользователь залогинен, ему будет сразу предложено установить приложение, если нет — вначале залогиниться, а уже потом устанавливать. Если приложение уже установлено, то идёт сразу переход на страницу, в хэше которой будет токен. Дальше идёт работа с API.
Самое интересное начинается после выхода из ВК. Ваше приложение может иметь ссылку на выход вида vk.com/login.php?op=logout. Это стандартная ссылка на выход из VK. Но после выхода пользователя из VK куки остаются рабочими.
Таким образом, если опять показать страницу авторизации, ввести совершенно другой логин и пароль — вы всё равно сможете пользоваться страницей первого пользователя.
Т.е. работа ведётся следующим образом — пользователь П1 авторизуется ВКонтакте через приложение. В приведённом примере я использую standalone-приложение, но, возможно, получится и с другими видами приложений. Дальше пользователь П1 нажимает на ссылку выхода из ВК, приведённую выше. После этого ни через браузер, ни через приложение зайти в ВК без авторизации не получится. Дальше пользователь П2 авторизуется через приложение. Затем, уже через браузер пользователь попадает на страницу пользователя П1, вместо своей страницы П2. И может делать с этой страницей абсолютно всё, что угодно, приложение на данном этапе уже не нужно и не играет никакой роли.
Самое смешное то, что вы можете использовать в вашем приложении самые безобидные права. То есть не нужно пугать пользователя тем, что вы просите доступ к фоткам, аудио, видео, сообщениям и всему остальному. Можно оставить только базовые — и всё. Куки при этом всё равно будет полностью рабочими, используя их вы попадёте прямиком на страницу пользователя.
Можно ли считать данную особенность уязвимостью — думайте сами. По-моему, это как минимум не то, чего ожидает пользователь, нажимая на кнопку «Выход» и надеясь на то, что теперь уж его страница в безопасности.
При написании данной заметки ни один пользователь ВК не пострадал.
UPD. При авторизации использовался браузер IE7.
В поддержку я писал задолго до того, как опубликовал статью на здесь. Собственно, публикация статьи здесь и произошла в результате того, что поддержка данный сигнал проигнорировала в духе «это не баг, а фича, но, возможно, что-то изменится в будущем».
Пакет
vk — github.com/markbates/goth/providers/vk — Пакеты Go
Пакет vk реализует протокол OAuth3 для аутентификации пользователей через vk.com.
Этот пакет можно использовать в качестве эталонной реализации поставщика OAuth3 для Goth.
- введите Провайдер
- func New (clientKey, секрет, строка callbackURL, области действия … строка) * Provider
- func (p *Provider) BeginAuth(строка состояния) (goth.Session, ошибка)
- func (p *Provider) Client() *http.Client
- func (p *Provider) Debug (bool отладки)
- func (p *Provider) FetchUser(session goth.Session) (goth.User, ошибка)
- func (p *Provider) Name() строка
- func (p *Provider) RefreshToken (строка RefreshToken) (*oauth3. Token, ошибка)
- func (p *Provider) RefreshTokenAvailable() bool
- func (p *Provider) SetName(строка имени)
- func (p *Provider) UnmarshalSession (строка данных) (goth.Session, ошибка)
- тип Сессия
- func (s *Session) Authorize(provider goth.Provider, params goth.Params) (строка, ошибка)
- func (s *Session) GetAuthURL() (строка, ошибка)
- func (s *Session) Marshal() строка
Этот раздел пуст.
Этот раздел пуст.
Этот раздел пуст.
тип Структура поставщика { Строка ClientKey Секретная строка Строка обратного URL-адреса HTTP-клиент *http.Client // содержит отфильтрованные или неэкспортированные поля }
Provider — это реализация goth.Provider для доступа к Github.
func New(clientKey, secret, callbackURL string, scopes ...string) *Provider
New создает нового провайдера ВКонтакте и устанавливает важные детали подключения.
Вы всегда должны вызывать `vk.New`, чтобы получить нового провайдера. Никогда не пытайтесь
создать вручную.
func (p *Provider) BeginAuth(строка состояния) (goth.Session, ошибка)
BeginAuth запрашивает у VK конечную точку аутентификации.
func (p *Provider) Client() *http.Client
func (p *Provider) Debug(bool отладки)
Debug не работает для пакета vk.
func (p *Provider) FetchUser(session goth.Session) (goth.User, error)
FetchUser зайдет в ВК и получит доступ к основной информации о пользователе.
func (p *Provider) Name() строка
Имя — это имя, используемое для последующего получения этого провайдера.
func (p *Provider) RefreshToken (строка RefreshToken) (*oauth3.Token, ошибка)
Токен обновления RefreshToken не предоставляется vk
func (p *Provider) RefreshTokenAvailable() bool
RefreshTokenAvailable токен обновления не предоставляется vk
func (p *Provider) SetName(строка имени)
SetName для обновления имени провайдера (необходимо в случае нескольких провайдеров 1 типа)
func (p *Provider) UnmarshalSession(строка данных) (goth. Session, ошибка)
UnmarshalSession разместит строку JSON в сеанс.
тип Структура сеанса { Строка AuthURL Строка AccessToken ExpiresAt time.Time // содержит отфильтрованные или неэкспортированные поля }
Сессия сохраняет данные в процессе авторизации в ВК.
func (s *Session) Authorize(provider goth.Provider, params goth.Params) (string, error)
Авторизовать сессию через VK и вернуть токен доступа для сохранения для будущего использования.
func (s *Session) GetAuthURL() (строка, ошибка)
GetAuthURL возвращает URL конечной точки аутентификации для провайдера.
func (s *Session) Marshal() string
Маршалировать сеанс в строку
Rails omniauth и разработка проблем с vk
Я собираюсь реализовать вход (регистрацию) в facebook и vkontakte для моего приложения rails, и с facebook все в порядке (вход и регистрация в порядке), сделано как в руководстве
вот
А вот с вконтакте что-то не так, у меня все равно получается «пустая» страница
вот мой код:
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController деф фейсбук # Вам необходимо реализовать метод ниже в вашей модели (например, app/models/user. rb) @user = User.find_for_facebook_oauth(request.env["omniauth.auth"], текущий_пользователь) если @user.persisted? flash[:notice] = I18n.t "devise.omniauth_callbacks.success", :kind => "Facebook" sign_in_and_redirect @user, :event => :authentication еще сеанс["devise.facebook_data"] = request.env["omniauth.auth"] redirect_to new_user_registration_url конец конец деф вконтакте @user = User.find_for_vkontakte_oauth(request.env["omniauth.auth"], текущий_пользователь) если @user.persisted? flash[:notice] = I18n.t "devise.omniauth_callbacks.success", :kind => "ВКонтакте" sign_in_and_redirect @user, :event => :authentication еще session["devise.vkontakte_data"] = request.env["omniauth.auth"] redirect_to new_user_registration_url конец конец конец
И модель:
класс Пользователь < ActiveRecord::Base # Включить модули разработки по умолчанию. Другие доступные: разработать :database_authenticable, :registerable, :восстанавливаемые, :запоминаемые, :отслеживаемые, :проверяемые, :token_authenticable, :lockable, :timeoutable, :omniauthable #:подтверждаемый, # Настройте доступные (или защищенные) атрибуты для вашей модели attr_accessible :email, :password, :password_confirmation, :remember_me, :provider, :uid, :name def self. find_for_facebook_oauth (аутентификация, signed_in_resource = ноль)
пользователь = User.where(:provider => auth.provider, :uid => auth.uid).first
если пользователь
пользователь = User.create(имя:auth.extra.raw_info.name,
провайдер: auth.provider,
идентификатор: auth.uid,
электронная почта: auth.info.email,
пароль: Devise.friendly_token[0,20]
)
конец
пользователь
конец
def self.new_with_session (параметры, сеанс)
super.tap сделать |пользователь|
if data = session["devise.facebook_data"] && session["devise.facebook_data"]["extra"]["raw_info"]
user.email = data["email"] если user.email.blank?
конец
if data = session["devise.vkontakte_data"] && session["devise.vkontakte_data"]["extra"]["raw_info"]
user.email = data["email"] если user.email.blank?
конец
конец
конец
def self.find_for_vkontakte_oauth(auth, signed_in_resource=nil)
пользователь = User.