galapagos_mobile 0.0.7 → 0.0.8
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +26 -5
- data/lib/galapagos_mobile/devise.rb +0 -39
- data/lib/galapagos_mobile/failure_app.rb +64 -0
- data/lib/galapagos_mobile/jpmobile.rb +3 -0
- data/lib/galapagos_mobile/request.rb +15 -0
- data/lib/galapagos_mobile/trans_sid.rb +23 -10
- data/lib/galapagos_mobile/version.rb +1 -1
- metadata +3 -1
data/README.md
CHANGED
@@ -6,9 +6,9 @@ jpmobileプラグインを使用した場合に発生する不具合を解消す
|
|
6
6
|
|
7
7
|
以下の環境で動作確認
|
8
8
|
|
9
|
-
* Rails : 3.0.4
|
10
|
-
* jpmobile : 0.1.4
|
11
|
-
* devise : 1.1.5 〜 1.1.
|
9
|
+
* Rails : 3.0.4 〜 3.0.6
|
10
|
+
* jpmobile : 0.1.4 〜 1.0.0.pre
|
11
|
+
* devise : 1.1.5 〜 1.1.8 (利用する場合)
|
12
12
|
|
13
13
|
## install
|
14
14
|
|
@@ -36,10 +36,31 @@ setupメソッドを実行
|
|
36
36
|
$ rails plugin install git://github.com/matsuda/galapagos_mobile.git
|
37
37
|
|
38
38
|
|
39
|
+
## Deviseを使用する場合
|
40
|
+
|
41
|
+
deviseの初期設定した際に生成される設定ファイル(devise.rb)に以下を設定
|
42
|
+
|
43
|
+
# /config/initializers/devise.rb
|
44
|
+
Devise.setup do |config|
|
45
|
+
...
|
46
|
+
config.warden do |manager|
|
47
|
+
manager.failure_app = GalapagosMobile::FailureApp
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
FailureAppをカスマイズする場合は、
|
52
|
+
|
53
|
+
class CustomFailureApp < GalapagosMobile::FailureApp
|
54
|
+
end
|
55
|
+
|
56
|
+
を継承して上記のwarden managerにセットする。
|
57
|
+
|
39
58
|
## 実装されている機能
|
40
59
|
|
41
60
|
* Cookie非対応の携帯でログイン処理を可能にする。
|
42
61
|
|
43
|
-
|
62
|
+
### deviseを使用している場合
|
44
63
|
|
45
|
-
login画面へのリダイレクト時に
|
64
|
+
* login画面へのリダイレクト時にsession\_idを付与
|
65
|
+
* login後に元の画面へリダイレクトバックする時に古いsession\_idを削除する。
|
66
|
+
* authenticate_{scope}! メソッドで invalidだった場合にsession\_idを引き継がせる。
|
@@ -2,44 +2,6 @@
|
|
2
2
|
# monkey patching for jpmobile 0.1.4 + devise 1.1.6
|
3
3
|
module GalapagosMobile
|
4
4
|
module Devise
|
5
|
-
module FailureApp
|
6
|
-
extend ActiveSupport::Concern
|
7
|
-
|
8
|
-
included do
|
9
|
-
class_inheritable_accessor :trans_sid_mode
|
10
|
-
# Set trans_sid_mode if you want to use others.
|
11
|
-
# ex. ::Devise::FailureApp.trans_sid_mode = :always
|
12
|
-
# in config/initializers/galapagos_mobile.rb
|
13
|
-
self.trans_sid_mode = :mobile
|
14
|
-
end
|
15
|
-
|
16
|
-
module InstanceMethods
|
17
|
-
# from jpmobile/trans_sid.rb -v 0.1.4
|
18
|
-
protected
|
19
|
-
# URLにsession_idを追加する。
|
20
|
-
def default_url_options
|
21
|
-
result = super || {}
|
22
|
-
return result unless request # for test process
|
23
|
-
return result unless apply_trans_sid?
|
24
|
-
return result.merge({session_key => jpmobile_session_id})
|
25
|
-
end
|
26
|
-
|
27
|
-
private
|
28
|
-
# session_keyを返す。
|
29
|
-
def session_key
|
30
|
-
unless key = Rails.application.config.session_options.merge(request.session_options || {})[:key]
|
31
|
-
key = ActionDispatch::Session::AbstractStore::DEFAULT_OPTIONS[:key]
|
32
|
-
end
|
33
|
-
key
|
34
|
-
end
|
35
|
-
|
36
|
-
# session_idを返す
|
37
|
-
def jpmobile_session_id
|
38
|
-
request.session_options[:id] rescue session.session_id
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
5
|
module Controllers
|
44
6
|
module Helpers
|
45
7
|
extend ActiveSupport::Concern
|
@@ -70,7 +32,6 @@ module ActionDispatch::Routing
|
|
70
32
|
# need devise_for mappings already declared to create filters and helpers.
|
71
33
|
def finalize_with_galapagos_mobile!
|
72
34
|
finalize_without_galapagos_mobile!
|
73
|
-
::Devise::FailureApp.send :include, GalapagosMobile::Devise::FailureApp
|
74
35
|
ActionController::Base.send :include, GalapagosMobile::Devise::Controllers::Helpers
|
75
36
|
end
|
76
37
|
alias_method_chain :finalize!, :galapagos_mobile
|
@@ -0,0 +1,64 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
#
|
3
|
+
# /config/initializers/devise.rb
|
4
|
+
# Devise.setup do |config|
|
5
|
+
# ...
|
6
|
+
# config.warden do |manager|
|
7
|
+
# manager.failure_app = GalapagosMobile::FailureApp
|
8
|
+
# end
|
9
|
+
# end
|
10
|
+
#
|
11
|
+
# resources
|
12
|
+
# from jpmobile/trans_sid.rb -v 1.0.0.pre
|
13
|
+
# from devise/failure_app.rb -v 0.1.8
|
14
|
+
#
|
15
|
+
module GalapagosMobile
|
16
|
+
class FailureApp < ::Devise::FailureApp
|
17
|
+
class_inheritable_accessor :trans_sid_mode
|
18
|
+
# Set trans_sid_mode if you want to use others.
|
19
|
+
# ex. ::Devise::FailureApp.trans_sid_mode = :always
|
20
|
+
# in config/initializers/galapagos_mobile.rb
|
21
|
+
self.trans_sid_mode = :mobile
|
22
|
+
|
23
|
+
protected
|
24
|
+
# URLにsession_idを追加する。
|
25
|
+
def default_url_options
|
26
|
+
result = super || {}
|
27
|
+
return result unless request # for test process
|
28
|
+
return result unless apply_trans_sid?
|
29
|
+
return result.merge({session_key => jpmobile_session_id})
|
30
|
+
end
|
31
|
+
|
32
|
+
# override
|
33
|
+
def http_auth?
|
34
|
+
if request.xhr?
|
35
|
+
::Devise.http_authenticatable_on_xhr
|
36
|
+
elsif http_auth_header?
|
37
|
+
!(request_format && ::Devise.navigational_formats.include?(request_format))
|
38
|
+
else
|
39
|
+
false
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
# from Devise -v 1.2.0
|
44
|
+
# It does not make sense to send authenticate headers in ajax requests
|
45
|
+
# or if the user disabled them.
|
46
|
+
def http_auth_header?
|
47
|
+
::Devise.mappings[scope].to.http_authenticatable && !request.xhr?
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
# session_keyを返す。
|
52
|
+
def session_key
|
53
|
+
unless key = Rails.application.config.session_options.merge(request.session_options || {})[:key]
|
54
|
+
key = ActionDispatch::Session::AbstractStore::DEFAULT_OPTIONS[:key]
|
55
|
+
end
|
56
|
+
key
|
57
|
+
end
|
58
|
+
|
59
|
+
# session_idを返す
|
60
|
+
def jpmobile_session_id
|
61
|
+
request.session_options[:id] rescue session.session_id
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
1
2
|
begin
|
2
3
|
require 'jpmobile'
|
3
4
|
rescue LoadError, NameError => e
|
@@ -7,9 +8,11 @@ rescue LoadError, NameError => e
|
|
7
8
|
end
|
8
9
|
|
9
10
|
ActiveSupport.on_load(:action_controller) do
|
11
|
+
require 'galapagos_mobile/request'
|
10
12
|
require 'galapagos_mobile/trans_sid'
|
11
13
|
end
|
12
14
|
|
13
15
|
if defined?(Devise)
|
14
16
|
require 'galapagos_mobile/devise'
|
17
|
+
require 'galapagos_mobile/failure_app'
|
15
18
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
class ActionDispatch::Request
|
3
|
+
def reset_session_with_jpmobile
|
4
|
+
reset_session_without_jpmobile
|
5
|
+
# SSLと非SSLでとsession_idが異なる場合に、
|
6
|
+
# Cookie非対応の携帯でもsession_idをパラメータで引き回すための対応
|
7
|
+
if self.mobile? # && !self.mobile.supports_cookie?
|
8
|
+
self.session_options[:id] = ActiveSupport::SecureRandom.hex(16)
|
9
|
+
if Rails.application.config.session_store == ActiveRecord::SessionStore
|
10
|
+
@env[ActiveRecord::SessionStore::SESSION_RECORD_KEY] = nil
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
alias_method_chain :reset_session, :jpmobile
|
15
|
+
end
|
@@ -1,15 +1,28 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
2
|
+
# from jpmobile -v 1.0.0.pre
|
3
|
+
require 'jpmobile/trans_sid.rb'
|
4
|
+
module ActionController
|
5
|
+
class Metal #:nodoc:
|
6
|
+
private
|
7
|
+
# trans_sidを適用すべきかを返す。
|
8
|
+
def apply_trans_sid?
|
9
|
+
# session_id が blank の場合は適用しない
|
10
|
+
return false if trans_sid_mode and jpmobile_session_id.blank?
|
11
|
+
|
12
|
+
case trans_sid_mode
|
13
|
+
when :always
|
14
|
+
session.inspect
|
15
|
+
return true
|
16
|
+
when :mobile
|
17
|
+
# SSLと非SSLでとsession_idが異なる場合に、
|
18
|
+
# Cookie非対応の携帯でもsession_idをパラメータで引き回すための対応
|
19
|
+
if request.mobile?# and !request.mobile.supports_cookie?
|
20
|
+
session.inspect
|
21
|
+
return true
|
22
|
+
end
|
11
23
|
end
|
24
|
+
|
25
|
+
return false
|
12
26
|
end
|
13
27
|
end
|
14
|
-
alias_method_chain :reset_session, :jpmobile
|
15
28
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: galapagos_mobile
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.8
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Kosuke Matsuda
|
@@ -35,8 +35,10 @@ files:
|
|
35
35
|
- install.rb
|
36
36
|
- lib/galapagos_mobile.rb
|
37
37
|
- lib/galapagos_mobile/devise.rb
|
38
|
+
- lib/galapagos_mobile/failure_app.rb
|
38
39
|
- lib/galapagos_mobile/jpmobile.rb
|
39
40
|
- lib/galapagos_mobile/rails.rb
|
41
|
+
- lib/galapagos_mobile/request.rb
|
40
42
|
- lib/galapagos_mobile/trans_sid.rb
|
41
43
|
- lib/galapagos_mobile/version.rb
|
42
44
|
- test/galapagos_mobile_test.rb
|