galapagos_mobile 0.0.7 → 0.0.8
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/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
|