vkontakte_api 1.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|