vkontakte_api 1.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +6 -1
- data/README.md +16 -3
- data/lib/vkontakte_api/namespaces.yml +4 -6
- data/lib/vkontakte_api/version.rb +1 -1
- data/spec/vkontakte_api/api_spec.rb +1 -1
- metadata +2 -2
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -76,13 +76,22 @@ VkontakteApi.upload(url: url, photo: ['/path/to/file.jpg', 'image/jpeg'])
|
|
76
76
|
|
77
77
|
##### Сайт
|
78
78
|
|
79
|
-
Авторизация сайтов проходит в 2
|
79
|
+
Авторизация сайтов проходит в 2 шага. Сначала пользователь перенаправляется на страницу ВКонтакте для подтверждения запрошенных у него прав сайта на доступ к его данным. Со списком возможных прав можно ознакомиться [здесь](http://vk.com/developers.php?oid=-1&p=%D0%9F%D1%80%D0%B0%D0%B2%D0%B0_%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF%D0%B0_%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9). Допустим, нужно получить доступ к друзьям (`friends`) и фотографиям (`photos`) пользователя.
|
80
|
+
|
81
|
+
В соответствии с [рекомендациями](http://tools.ietf.org/html/draft-ietf-oauth-v2-30#section-10.12) в протоколе OAuth2 для защиты от [CSRF](http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%B4%D0%B4%D0%B5%D0%BB%D0%BA%D0%B0_%D0%BC%D0%B5%D0%B6%D1%81%D0%B0%D0%B9%D1%82%D0%BE%D0%B2%D1%8B%D1%85_%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2), нужно передать параметр `state`, содержащий случайное значение. На данный момент по непонятным причинам ВКонтакте игнорирует этот параметр, если в `scope` не указан `notify`.
|
80
82
|
|
81
83
|
``` ruby
|
82
|
-
|
84
|
+
session[:state] = Digest::MD5.hexdigest(rand.to_s)
|
85
|
+
redirect_to VkontakteApi.authorization_url(scope: [:notify, :friends, :photos], state: session[:state])
|
83
86
|
```
|
84
87
|
|
85
|
-
После подтверждения пользователь перенаправляется на указанный в настройках `redirect_uri`, причем в параметрах будет передан код, по которому можно получить токен
|
88
|
+
После подтверждения пользователь перенаправляется на указанный в настройках `redirect_uri`, причем в параметрах будет передан код, по которому можно получить токен доступа, а также переданный ранее `state`. Если `state` не совпадает с тем, который был использован при отправлении пользователя на ВКонтакте, то скорее всего это попытка CSRF-атаки - стоит отправить пользователя на повторную авторизацию.
|
89
|
+
|
90
|
+
``` ruby
|
91
|
+
redirect_to login_url, alert: 'Ошибка авторизации' if params[:state] != session[:state]
|
92
|
+
```
|
93
|
+
|
94
|
+
`vkontakte_api` предоставляет метод `VkontakteApi.authorize`, который делает запрос к ВКонтакте, получает токен и создает клиент; нужно лишь передать ему код:
|
86
95
|
|
87
96
|
``` ruby
|
88
97
|
@vk = VkontakteApi.authorize(code: params[:code])
|
@@ -151,6 +160,10 @@ vk.friends.get(uid: 1, fields: [:first_name, :last_name, :photo])
|
|
151
160
|
|
152
161
|
Таким образом, в rails-приложении с настройками по умолчанию в production записываются только ответы сервера при ошибках; в development также логгируются URL-ы запросов.
|
153
162
|
|
163
|
+
### Пример использования
|
164
|
+
|
165
|
+
[Здесь](http://vkontakte-on-rails.herokuapp.com/) можно посмотреть пример использования `vkontakte_api` в rails-приложении (используются только читающие методы *.get - приложение ничего не пишет на ВКонтакте, только читает). Исходный код можно посмотреть [тут](https://github.com/7even/vkontakte_on_rails).
|
166
|
+
|
154
167
|
## Настройка
|
155
168
|
|
156
169
|
Глобальные параметры `vkontakte_api` задаются в блоке `VkontakteApi.configure` следующим образом:
|
@@ -1,4 +1,5 @@
|
|
1
1
|
- users
|
2
|
+
- likes
|
2
3
|
- friends
|
3
4
|
- groups
|
4
5
|
- photos
|
@@ -13,16 +14,13 @@
|
|
13
14
|
- storage
|
14
15
|
- notes
|
15
16
|
- pages
|
16
|
-
-
|
17
|
-
- offers
|
18
|
-
- questions
|
17
|
+
- stats
|
19
18
|
- subscriptions
|
19
|
+
- leads
|
20
20
|
- messages
|
21
|
-
- likes
|
22
21
|
- status
|
23
22
|
- polls
|
24
23
|
- account
|
25
24
|
- board
|
26
|
-
- auth
|
27
|
-
- stats
|
28
25
|
- fave
|
26
|
+
- auth
|
@@ -6,7 +6,7 @@ describe VkontakteApi::API do
|
|
6
6
|
|
7
7
|
@connection = Faraday.new do |builder|
|
8
8
|
builder.response :mashify
|
9
|
-
builder.response :
|
9
|
+
builder.response :oj, :preserve_raw => true
|
10
10
|
builder.adapter :test do |stub|
|
11
11
|
stub.get('/apiMethod') do
|
12
12
|
[200, {}, Oj.dump(@result)]
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vkontakte_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.0.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-08-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: faraday
|