omniauth-kakao 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +46 -2
- data/example/Gemfile +4 -0
- data/example/Gemfile.lock +46 -0
- data/example/app.rb +135 -0
- data/lib/omniauth-kakao/version.rb +1 -1
- data/lib/omniauth/strategies/kakao.rb +3 -1
- data/omniauth-kakao.gemspec +1 -1
- data/spec/omniauth/strategies/kakao_spec.rb +17 -14
- data/spec/spec_helper.rb +1 -0
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7c204a8a6c343b6b8115eae40980433176e2e899
|
4
|
+
data.tar.gz: ed3208ce20e5ec41eaffaaabe6175f40ab3d26e2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 55f45f5dd0469c6c0544c232d3a96ff5a31fd720a5d1ad1dd86d23df02402dc0754c648d8c5fc87aec1441783302951c52b3def30e219b9b1c35f730696759fa
|
7
|
+
data.tar.gz: e485c7959f343ef18d723b4cfa0e116f8a554ce57c84f809edca9cb298274cdef94bafc36d9498a8c5492d6f158d5cb08efaa2974f193b9dd7a2cdc77738bdb3
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -3,35 +3,71 @@
|
|
3
3
|
This is the OmniAuth strategy for authenticating to [Kakao](http://www.kakao.com/). To
|
4
4
|
use it, you'll need to sign up for an REST API Key on the [Kakao Developers Page](http://developers.kakao.com). For more information, please refer to [Create New Application](https://developers.kakao.com/docs/restapi#시작하기-앱-생성) page.
|
5
5
|
|
6
|
-
[카카오](http://www.kakao.com/) 인증을 위한 OmniAuth strategy 입니다.
|
7
|
-
[카카오 개발자 페이지](http://developers.kakao.com) 에서 REST API 키를 생성한 뒤 이용할 수 있습니다. 자세한 사항은 [앱 생성](https://developers.kakao.com/docs/restapi#시작하기-앱-생성) 페이지를 참조해 주세요.
|
6
|
+
[카카오](http://www.kakao.com/) 인증을 위한 OmniAuth strategy 입니다. [카카오 개발자 페이지](http://developers.kakao.com)에서 REST API 키를 생성한 뒤 이용해 주세요. 자세한 사항은 [시작하기 - 앱 생성](https://developers.kakao.com/docs/restapi#시작하기-앱-생성) 페이지를 참조하시기 바랍니다.
|
8
7
|
|
9
8
|
## Installing
|
10
9
|
|
11
10
|
Add to your `Gemfile`:
|
12
11
|
|
12
|
+
`Gemfile`에 다음의 코드를 넣어주세요.
|
13
|
+
|
13
14
|
```ruby
|
14
15
|
gem 'omniauth-kakao'
|
15
16
|
```
|
16
17
|
|
17
18
|
Then `bundle install`.
|
18
19
|
|
20
|
+
이후 `bundle install` 을 실행해 주세요.
|
21
|
+
|
19
22
|
## Usage
|
20
23
|
|
21
24
|
Here's a quick example, adding the middleware to a Rails app in `config/initializers/omniauth.rb`:
|
22
25
|
|
26
|
+
다음은 간단한 예제입니다. `config/initializers/omniauth.rb`에서 미들웨어를 레일즈 어플리케이션에 넣어주세요.
|
27
|
+
|
28
|
+
|
23
29
|
```ruby
|
24
30
|
Rails.application.config.middleware.use OmniAuth::Builder do
|
25
31
|
provider :kakao, ENV['KAKAO_CLIENT_ID']
|
26
32
|
end
|
27
33
|
```
|
28
34
|
|
35
|
+
Then go to [My Application](https://developers.kakao.com/apps) page, select your current application and add your domain address(ex: http://localhost:3000/) to 'Setting - Platform - Web - Site Domain'.
|
36
|
+
|
37
|
+
그리고 [내 어플리케이션](https://developers.kakao.com/apps)에서 현재 어플리케이션을 선택하고, '설정 - 플랫폼 - 웹 - 사이트 도메인'에 도메인 주소(예: http://localhost:3000/)를 넣어주세요.
|
38
|
+
|
39
|
+
![이미지](https://developers.kakao.com/assets/images/dashboard/dev_011.png)
|
40
|
+
|
29
41
|
For more information, please read the [OmniAuth](https://github.com/intridea/omniauth) docs for detailed instructions.
|
30
42
|
|
43
|
+
자세한 사항은 [OmniAuth](https://github.com/intridea/omniauth)의 문서를 참고해 주세요.
|
44
|
+
|
45
|
+
## Example
|
46
|
+
|
47
|
+
You can test omniauth-kakao in the `example/` folder.
|
48
|
+
|
49
|
+
`example/` 폴더에 있는 예제를 통해 omniauth-kakao를 테스트해볼 수 있습니다.
|
50
|
+
|
51
|
+
```
|
52
|
+
cd example/
|
53
|
+
bundle install
|
54
|
+
KAKAO_CLIENT_ID='<your-kakako-client-id>' ruby app.rb
|
55
|
+
```
|
56
|
+
|
57
|
+
Then open `http://localhost:4567/` in your browser.
|
58
|
+
|
59
|
+
이후 `http://localhost:4567/`로 접속하시면 됩니다.
|
60
|
+
|
61
|
+
Warning: Do not forgot to add `http://localhost:4567/` in your [Application Setting](https://developers.kakao.com/apps).
|
62
|
+
|
63
|
+
주의: [어플리케이션 설정](https://developers.kakao.com/apps) 의 '설정된 플랫폼 - 웹 - 사이트 도메인'에 `http://localhost:4567/`을 넣는 걸 잊지 마세요.
|
64
|
+
|
31
65
|
## Auth Hash
|
32
66
|
|
33
67
|
Here's an example *Auth Hash* available in `request.env['omniauth.auth']`:
|
34
68
|
|
69
|
+
`request.env['omniauth.auth']` 안에 들어있는 *Auth Hash* 는 다음과 같습니다.
|
70
|
+
|
35
71
|
```ruby
|
36
72
|
{
|
37
73
|
:provider => 'kakao',
|
@@ -63,6 +99,14 @@ Here's an example *Auth Hash* available in `request.env['omniauth.auth']`:
|
|
63
99
|
1. Add tests for it. This is important!
|
64
100
|
1. Send a pull request from each feature branch.
|
65
101
|
|
102
|
+
***
|
103
|
+
|
104
|
+
1. 저장소를 Fork해 주세요.
|
105
|
+
1. 새로운 기능(또는 개선할 부분)마다 브랜치를 만들어 주세요.
|
106
|
+
1. 테스트를 작성해주세요. 이는 매우 중요합니다!
|
107
|
+
1. 브랜치를 pull request로 보내주세요.
|
108
|
+
|
109
|
+
|
66
110
|
## License
|
67
111
|
|
68
112
|
Copyright (c) 2014 [Shayne Sung-Hee Kang](http://medium.com/@shaynekang).
|
data/example/Gemfile
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
PATH
|
2
|
+
remote: ../
|
3
|
+
specs:
|
4
|
+
omniauth-kakao (0.0.2)
|
5
|
+
omniauth (~> 1.0)
|
6
|
+
omniauth-oauth2 (~> 1.1)
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: https://rubygems.org/
|
10
|
+
specs:
|
11
|
+
faraday (0.9.0)
|
12
|
+
multipart-post (>= 1.2, < 3)
|
13
|
+
hashie (2.1.1)
|
14
|
+
jwt (0.1.12)
|
15
|
+
multi_json (1.10.0)
|
16
|
+
multi_xml (0.5.5)
|
17
|
+
multipart-post (2.0.0)
|
18
|
+
oauth2 (0.9.3)
|
19
|
+
faraday (>= 0.8, < 0.10)
|
20
|
+
jwt (~> 0.1.8)
|
21
|
+
multi_json (~> 1.3)
|
22
|
+
multi_xml (~> 0.5)
|
23
|
+
rack (~> 1.2)
|
24
|
+
omniauth (1.2.1)
|
25
|
+
hashie (>= 1.2, < 3)
|
26
|
+
rack (~> 1.0)
|
27
|
+
omniauth-oauth2 (1.1.2)
|
28
|
+
faraday (>= 0.8, < 0.10)
|
29
|
+
multi_json (~> 1.3)
|
30
|
+
oauth2 (~> 0.9.3)
|
31
|
+
omniauth (~> 1.2)
|
32
|
+
rack (1.5.2)
|
33
|
+
rack-protection (1.5.3)
|
34
|
+
rack
|
35
|
+
sinatra (1.4.5)
|
36
|
+
rack (~> 1.4)
|
37
|
+
rack-protection (~> 1.4)
|
38
|
+
tilt (~> 1.3, >= 1.3.4)
|
39
|
+
tilt (1.4.1)
|
40
|
+
|
41
|
+
PLATFORMS
|
42
|
+
ruby
|
43
|
+
|
44
|
+
DEPENDENCIES
|
45
|
+
omniauth-kakao!
|
46
|
+
sinatra (~> 1.4.5)
|
data/example/app.rb
ADDED
@@ -0,0 +1,135 @@
|
|
1
|
+
require 'bundler/setup'
|
2
|
+
require 'sinatra'
|
3
|
+
require 'omniauth-kakao'
|
4
|
+
|
5
|
+
client_id = ENV['KAKAO_CLIENT_ID']
|
6
|
+
if client_id == nil
|
7
|
+
class NoClientIDError < StandardError; end
|
8
|
+
raise NoClientIDError, "KAKAO_CLIENT_ID is nil. Please run example like `KAKAO_CLIENT_ID='<your-kakako-client-id>' ruby app.rb`"
|
9
|
+
end
|
10
|
+
|
11
|
+
use Rack::Session::Cookie
|
12
|
+
|
13
|
+
use OmniAuth::Builder do
|
14
|
+
provider :kakao, client_id
|
15
|
+
end
|
16
|
+
|
17
|
+
helpers do
|
18
|
+
def yaml_to_html(yaml)
|
19
|
+
display = yaml.split("\n")
|
20
|
+
display = display.map do |e|
|
21
|
+
e.gsub!(" ", " ")
|
22
|
+
"<p>#{e}</p>"
|
23
|
+
end.join
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
get '/' do
|
28
|
+
erb :index
|
29
|
+
end
|
30
|
+
|
31
|
+
get '/auth/:provider/callback' do
|
32
|
+
@modal = {
|
33
|
+
title: "Success!",
|
34
|
+
body: yaml_to_html(request.env['omniauth.auth'].to_yaml)
|
35
|
+
}
|
36
|
+
|
37
|
+
erb :index
|
38
|
+
end
|
39
|
+
|
40
|
+
get '/auth/failure' do
|
41
|
+
@modal = {
|
42
|
+
title: "Failure",
|
43
|
+
body: "Error: #{params[:message]}"
|
44
|
+
}
|
45
|
+
|
46
|
+
erb :index
|
47
|
+
end
|
48
|
+
|
49
|
+
__END__
|
50
|
+
@@ index
|
51
|
+
<html>
|
52
|
+
<head>
|
53
|
+
<title>Test Application for Omniauth Kakao</title>
|
54
|
+
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css">
|
55
|
+
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap-theme.min.css">
|
56
|
+
<script src="https://code.jquery.com/jquery-2.1.0.min.js"></script>
|
57
|
+
<script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
|
58
|
+
<style>
|
59
|
+
#login-form {
|
60
|
+
margin-top: 30px;
|
61
|
+
text-align: center;
|
62
|
+
}
|
63
|
+
|
64
|
+
#login-form.panel-primary {
|
65
|
+
border-color: #FFEB00;
|
66
|
+
}
|
67
|
+
|
68
|
+
#login-form.panel-primary > .panel-heading {
|
69
|
+
background-image: -webkit-linear-gradient(top, #FFEB00 0, #FFEB00 100%);
|
70
|
+
background-image: -moz-linear-gradient(top, #FFEB00 0, #FFEB00 100%);
|
71
|
+
background-image: -o-linear-gradient(top, #FFEB00 0, #FFEB00 100%);
|
72
|
+
background-image: linear-gradient(top, #FFEB00 0, #FFEB00 100%);
|
73
|
+
background-color: #FFEB00;
|
74
|
+
border-color: #FFEB00;
|
75
|
+
color: #3D1D12;
|
76
|
+
}
|
77
|
+
|
78
|
+
.btn-kakao {
|
79
|
+
display: inline-block;
|
80
|
+
background-image: url("https://kauth.kakao.com/public/widget/login/kr/kr_02_medium.png");
|
81
|
+
|
82
|
+
width: 222px;
|
83
|
+
height: 49px;
|
84
|
+
|
85
|
+
line-height: 0;
|
86
|
+
font-size: 0;
|
87
|
+
color: transparent;
|
88
|
+
}
|
89
|
+
</style>
|
90
|
+
</head>
|
91
|
+
<body>
|
92
|
+
<div class="container">
|
93
|
+
<div class="row">
|
94
|
+
<div class="col-md-6 col-md-offset-3">
|
95
|
+
<div id="login-form" class="panel panel-primary">
|
96
|
+
<div class="panel-heading">
|
97
|
+
<h3 class="panel-title">Test Application for Omniauth Kakao</h3>
|
98
|
+
</div>
|
99
|
+
|
100
|
+
<div class="panel-body">
|
101
|
+
<a href="/auth/kakao" class="btn-kakao">카카오 계정으로 로그인</a>
|
102
|
+
</div>
|
103
|
+
</div>
|
104
|
+
</div>
|
105
|
+
|
106
|
+
<% if @modal %>
|
107
|
+
<div class="modal fade" id="auth-modal" tabindex="-1" role="dialog" aria-labelledby="auth-modal-label" aria-hidden="true">
|
108
|
+
<div class="modal-dialog modal-lg">
|
109
|
+
<div class="modal-content">
|
110
|
+
<div class="modal-header">
|
111
|
+
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
112
|
+
<h4 class="modal-title" id="myModalLabel"><%= @modal[:title] %></h4>
|
113
|
+
</div>
|
114
|
+
|
115
|
+
<div class="modal-body">
|
116
|
+
<%= @modal[:body] %>
|
117
|
+
</div>
|
118
|
+
|
119
|
+
<div class="modal-footer">
|
120
|
+
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
|
121
|
+
</div>
|
122
|
+
</div>
|
123
|
+
</div>
|
124
|
+
</div>
|
125
|
+
|
126
|
+
<script>
|
127
|
+
$(function(){
|
128
|
+
$('#auth-modal').modal('show');
|
129
|
+
});
|
130
|
+
</script>
|
131
|
+
<% end %>
|
132
|
+
</div>
|
133
|
+
</div>
|
134
|
+
</body>
|
135
|
+
</html>
|
@@ -30,7 +30,9 @@ module OmniAuth
|
|
30
30
|
end
|
31
31
|
|
32
32
|
def callback_phase
|
33
|
-
|
33
|
+
previous_callback_path = options.delete(:callback_path)
|
34
|
+
@env["PATH_INFO"] = callback_path
|
35
|
+
options[:callback_path] = previous_callback_path
|
34
36
|
super
|
35
37
|
end
|
36
38
|
|
data/omniauth-kakao.gemspec
CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |s|
|
|
8
8
|
s.platform = Gem::Platform::RUBY
|
9
9
|
s.authors = ["Shayne Sung-Hee Kang"]
|
10
10
|
s.email = ["shayne.kang@gmail.com"]
|
11
|
-
s.homepage = "
|
11
|
+
s.homepage = "https://github.com/shaynekang/omniauth-kakao"
|
12
12
|
s.summary = %q{OmniAuth strategy for Kakao}
|
13
13
|
s.description = %q{OmniAuth strategy for Kakao(http://developers.kakao.com/)}
|
14
14
|
s.license = "MIT"
|
@@ -19,7 +19,7 @@ describe OmniAuth::Strategies::Kakao do
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
-
def
|
22
|
+
def make_request(url, opts={})
|
23
23
|
Rack::MockRequest.env_for(url, {
|
24
24
|
'rack.session' => {},
|
25
25
|
'SERVER_NAME' => SERVER_NAME,
|
@@ -28,9 +28,10 @@ describe OmniAuth::Strategies::Kakao do
|
|
28
28
|
|
29
29
|
describe "GET /auth/kakao" do
|
30
30
|
it "should redirect to authorize page" do
|
31
|
-
request =
|
31
|
+
request = make_request('/auth/kakao')
|
32
32
|
|
33
33
|
code, env = middleware.call(request)
|
34
|
+
|
34
35
|
code.should == 302
|
35
36
|
|
36
37
|
expect_url = <<-EXPECT
|
@@ -38,11 +39,10 @@ describe OmniAuth::Strategies::Kakao do
|
|
38
39
|
?client_id=#{CLIENT_ID}
|
39
40
|
&redirect_uri=http://#{SERVER_NAME}/oauth
|
40
41
|
&response_type=code
|
41
|
-
|
42
|
-
|
42
|
+
EXPECT
|
43
|
+
.gsub(/(\n|\t|\s)/, '')
|
43
44
|
|
44
|
-
actual_url = URI.decode(env['Location'])
|
45
|
-
actual_url = actual_url.split("&state")[0]
|
45
|
+
actual_url = URI.decode(env['Location'].split("&state")[0])
|
46
46
|
|
47
47
|
actual_url.should == expect_url
|
48
48
|
end
|
@@ -54,7 +54,7 @@ describe OmniAuth::Strategies::Kakao do
|
|
54
54
|
ACCESS_TOKEN = "dummy-access-token"
|
55
55
|
REFRESH_TOKEN = "dummy-refresh-token"
|
56
56
|
|
57
|
-
|
57
|
+
before do
|
58
58
|
FakeWeb.register_uri(:post, "https://kauth.kakao.com/oauth/token",
|
59
59
|
:content_type => "application/json;charset=UTF-8",
|
60
60
|
:parameters => {
|
@@ -84,30 +84,33 @@ describe OmniAuth::Strategies::Kakao do
|
|
84
84
|
}
|
85
85
|
}.to_json
|
86
86
|
)
|
87
|
+
end
|
87
88
|
|
88
|
-
|
89
|
+
it "should request access token and user information" do
|
90
|
+
request = make_request("/oauth?code=#{CODE}&state=#{STATE}", {
|
89
91
|
'rack.session' => {
|
90
92
|
'omniauth.state' => STATE
|
91
93
|
},
|
92
94
|
})
|
93
95
|
|
94
96
|
code, env = middleware.call(request)
|
97
|
+
|
95
98
|
code.should == 200
|
96
99
|
|
97
|
-
|
100
|
+
response = env['omniauth.auth']
|
98
101
|
|
99
|
-
|
100
|
-
|
102
|
+
response.provider.should == "kakao"
|
103
|
+
response.uid.should == "123456789"
|
101
104
|
|
102
|
-
information =
|
105
|
+
information = response.info
|
103
106
|
information.name.should == "John Doe"
|
104
107
|
information.image.should == "http://xxx.kakao.com/.../aaa.jpg"
|
105
108
|
|
106
|
-
credentials =
|
109
|
+
credentials = response.credentials
|
107
110
|
credentials.token.should == ACCESS_TOKEN
|
108
111
|
credentials.refresh_token.should == REFRESH_TOKEN
|
109
112
|
|
110
|
-
properties =
|
113
|
+
properties = response.extra.properties
|
111
114
|
properties.nickname.should == "John Doe"
|
112
115
|
properties.thumbnail_image.should == "http://xxx.kakao.com/.../aaa.jpg"
|
113
116
|
properties.profile_image.should == "http://xxx.kakao.com/.../bbb.jpg"
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: omniauth-kakao
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shayne Sung-Hee Kang
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-05-
|
11
|
+
date: 2014-05-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: omniauth
|
@@ -94,13 +94,16 @@ files:
|
|
94
94
|
- Gemfile.lock
|
95
95
|
- Guardfile
|
96
96
|
- README.md
|
97
|
+
- example/Gemfile
|
98
|
+
- example/Gemfile.lock
|
99
|
+
- example/app.rb
|
97
100
|
- lib/omniauth-kakao.rb
|
98
101
|
- lib/omniauth-kakao/version.rb
|
99
102
|
- lib/omniauth/strategies/kakao.rb
|
100
103
|
- omniauth-kakao.gemspec
|
101
104
|
- spec/omniauth/strategies/kakao_spec.rb
|
102
105
|
- spec/spec_helper.rb
|
103
|
-
homepage:
|
106
|
+
homepage: https://github.com/shaynekang/omniauth-kakao
|
104
107
|
licenses:
|
105
108
|
- MIT
|
106
109
|
metadata: {}
|