bonio-omniauth-wechat-oauth2 0.1.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.
- checksums.yaml +7 -0
- data/README.md +46 -0
- data/lib/omniauth-wechat-oauth2.rb +1 -0
- data/lib/omniauth/strategies/wechat.rb +72 -0
- metadata +89 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 2ed8340e903e18f5f2372f573cac2ac742a2b34d
|
4
|
+
data.tar.gz: 394fb2e4864fa999267bc7b6a01e69e02895a3be
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 0a5e9efcf8144c889911680d29ecc052d90ec305bc3c0200b1e71d67f34d5efd8f37dda8e3995cf8b6c8975a1c153f5517bd6121ba039b733a4db23363fb82a0
|
7
|
+
data.tar.gz: 6e5f22bb547f42ea0fca2cfd232a940019f30dd0304d7c555e0b979493b78b9a0e680f52e00a805d487d1309879d63b4d77a90efec1376ab777facda0eaefaa5
|
data/README.md
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
# Omniauth::Openweixin::Oauth2
|
2
|
+
|
3
|
+
Omniauth Strategy for https://open.weixin.qq.com/
|
4
|
+
|
5
|
+
微信开放平台的Omniauth Strategy
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
gem "omniauth-wechat-oauth2", git: 'git@github.com:yangsr/omniauth-wechat-oauth2.git'
|
11
|
+
```
|
12
|
+
|
13
|
+
## Usage
|
14
|
+
|
15
|
+
Here's an example for adding the middleware to a Rails app in `config/initializers/omniauth.rb`:
|
16
|
+
```ruby
|
17
|
+
Rails.application.config.middleware.use OmniAuth::Builder do
|
18
|
+
provider :wechat, ENV["WECHAT_APP_ID"], ENV["WECHAT_APP_SECRET"]
|
19
|
+
end
|
20
|
+
```
|
21
|
+
|
22
|
+
If you want to specify the callback url:
|
23
|
+
```ruby
|
24
|
+
Rails.application.config.middleware.use OmniAuth::Builder do
|
25
|
+
provider :wechat, ENV["WECHAT_APP_ID"], ENV["WECHAT_APP_SECRET"],
|
26
|
+
:authorize_params => {:redirect_uri => "http://www.example.com/auth/wechat/callback"}
|
27
|
+
end
|
28
|
+
```
|
29
|
+
You can now access the OmniAuth Wechat OAuth2 URL: `/auth/wechat`
|
30
|
+
|
31
|
+
## Credits
|
32
|
+
|
33
|
+
Skinnyworm, If you want the Omniauth Strategy for http://mp.weixin.qq.com, Click [here](https://github.com/skinnyworm/omniauth-wechat-oauth2)
|
34
|
+
|
35
|
+
## Notice
|
36
|
+
There is some difference between https://open.weixin.qq.com/ and http://mp.weixin.qq.com, plz choose the appropriate gem to use.
|
37
|
+
|
38
|
+
微信公众平台和微信开放平台的OAuth流程略有不同,请选择合适的gem使用。
|
39
|
+
|
40
|
+
## About Unionid
|
41
|
+
|
42
|
+
UnionID机制,官方的解释是:
|
43
|
+
|
44
|
+
> 通过获取用户基本信息接口,开发者可通过OpenID来获取用户基本信息,而如果开发者拥有多个公众号,可使用以下办法通过UnionID机制来在多公众号之间进行用户帐号互通。只要是同一个微信开放平台帐号下的公众号,用户的UnionID是唯一的。换句话说,同一用户,对同一个微信开放平台帐号下的不同应用,UnionID是相同的。
|
45
|
+
|
46
|
+
此前的OpenID机制,每个微信号对应每个公众号只有唯一的OpenID,所以不同微信公众号之间是不能共享用户的,现在有了UnionID就可以了。
|
@@ -0,0 +1 @@
|
|
1
|
+
require "omniauth/strategies/wechat"
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require "omniauth-oauth2"
|
2
|
+
|
3
|
+
module OmniAuth
|
4
|
+
module Strategies
|
5
|
+
class Wechat < OmniAuth::Strategies::OAuth2
|
6
|
+
# Give your strategy a name.
|
7
|
+
option :name, "wechat"
|
8
|
+
|
9
|
+
# This is where you pass the options you would pass when
|
10
|
+
# initializing your consumer from the OAuth gem.
|
11
|
+
option :client_options, {
|
12
|
+
site: "https://api.weixin.qq.com",
|
13
|
+
authorize_url: "https://open.weixin.qq.com/connect/qrconnect#wechat_redirect",
|
14
|
+
token_url: "/sns/oauth2/access_token",
|
15
|
+
token_method: :get
|
16
|
+
}
|
17
|
+
|
18
|
+
option :authorize_params, {scope: "snsapi_login"}
|
19
|
+
|
20
|
+
option :token_params, {parse: :json}
|
21
|
+
|
22
|
+
# These are called after authentication has succeeded. If
|
23
|
+
# possible, you should try to set the UID without making
|
24
|
+
# additional calls (if the user id is returned with the token
|
25
|
+
# or as a URI parameter). This may not be possible with all
|
26
|
+
# providers.
|
27
|
+
uid { raw_info['openid'] }
|
28
|
+
|
29
|
+
info do
|
30
|
+
{
|
31
|
+
nickname: raw_info['nickname'],
|
32
|
+
sex: raw_info['sex'],
|
33
|
+
province: raw_info['province'],
|
34
|
+
city: raw_info['city'],
|
35
|
+
country: raw_info['country'],
|
36
|
+
headimgurl: raw_info['headimgurl'],
|
37
|
+
unionid: raw_info['unionid'],
|
38
|
+
}
|
39
|
+
end
|
40
|
+
|
41
|
+
extra do
|
42
|
+
{raw_info: raw_info}
|
43
|
+
end
|
44
|
+
|
45
|
+
def request_phase
|
46
|
+
params = client.auth_code.authorize_params.merge(redirect_uri: callback_url).merge(authorize_params)
|
47
|
+
params["appid"] = params.delete("client_id")
|
48
|
+
redirect client.authorize_url(params)
|
49
|
+
end
|
50
|
+
|
51
|
+
def raw_info
|
52
|
+
@uid ||= access_token["openid"]
|
53
|
+
@raw_info ||= begin
|
54
|
+
access_token.options[:mode] = :query
|
55
|
+
response = access_token.get("/sns/userinfo", :params => {"openid" => @uid}, parse: :text)
|
56
|
+
@raw_info = JSON.parse(response.body.gsub(/[\u0000-\u001f]+/, ''))
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
protected
|
61
|
+
def build_access_token
|
62
|
+
params = {
|
63
|
+
'appid' => client.id,
|
64
|
+
'secret' => client.secret,
|
65
|
+
'code' => request.params['code'],
|
66
|
+
'grant_type' => 'authorization_code'
|
67
|
+
}.merge(token_params.to_hash(symbolize_keys: true))
|
68
|
+
client.get_token(params, deep_symbolize(options.auth_token_params))
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
metadata
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: bonio-omniauth-wechat-oauth2
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Skinnyworm, yangsr
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-12-09 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: omniauth
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: omniauth-oauth2
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '2.7'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '2.7'
|
55
|
+
description: Using OAuth2 to authenticate wechat user when web resources being viewed
|
56
|
+
within wechat(weixin) client.
|
57
|
+
email:
|
58
|
+
- askinnyworm@gmail.com, ysr1023@foxmail.com
|
59
|
+
executables: []
|
60
|
+
extensions: []
|
61
|
+
extra_rdoc_files: []
|
62
|
+
files:
|
63
|
+
- README.md
|
64
|
+
- lib/omniauth-wechat-oauth2.rb
|
65
|
+
- lib/omniauth/strategies/wechat.rb
|
66
|
+
homepage: https://github.com/BonioTw/omniauth-wechat-oauth2
|
67
|
+
licenses: []
|
68
|
+
metadata: {}
|
69
|
+
post_install_message:
|
70
|
+
rdoc_options: []
|
71
|
+
require_paths:
|
72
|
+
- lib
|
73
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
requirements: []
|
84
|
+
rubyforge_project:
|
85
|
+
rubygems_version: 2.2.5
|
86
|
+
signing_key:
|
87
|
+
specification_version: 4
|
88
|
+
summary: Omniauth strategy for open.weixin.qq.com
|
89
|
+
test_files: []
|