Ryan Boland's excellent Rails multitenancy tutorial numaralı telefonu takip ediyorum, ancak devise_invitable ile bir pürüzle karşılaştım. Ben Raylar 4 devise_invitable davetiye belirteci geçersiz
Rails 4.1.5
devise 3.3.0
devise_invitable 1.3.6
Postgresql
Ben seçilmiş bir alt etki alanındaki bir kullanıcı daveti gayet gönderebilir hangi (mysubdomain.lvh.me:3000), yeni bir hesap ve kullanıcı/hesap sahibini oluşturmak ... kullanıyorum. Giriş bağlantısını veya oturumu kapattığımı garantilemek için davetiye bağlantısını gizli bir Chrome oturumunda açarım. Davet bağlantısına tıkladıktan sonra, sayfadaki (mysubdomain.lvh.me:3000/users/sign_in) giriş sayfasına yönlendirilir ve bir flash bildirimi görürsünüz: "Sağlanan davetiye belirtisi geçerli değil!"
Ben Gördüğünüz gibi
<%= link_to 'Accept invitation', accept_invitation_url(@resource, :invitation_token => @token) %>
, ben @token kullanımını temin ... çok basit mailler görünümü (app/views/hazırlamak/mailler/invitation_instructions.html.erb) kullanıyorum here tarif edildiği gibi.
Davetiyeyi oluştururken, veritabanına davetiye belirtildiğini doğruladım (bu durumda [email protected] - d1801fd8df78[cd125d5d8091fdc6a72c8f8faf4136cb282d497ec612195e9). Bunun, kabul isteğiyle birlikte davetiyedeki belirteçle eşleştiğini doğruladım (aşağıdaki izlere bakınız). Yine de, oturum açma işlemini tamamlamak yerine kullanıcı oturum açma sayfasına yönlendirir ve ayrıca "Filtre zinciri şu şekilde durduruldu: resource_from_invitation_token işlenen veya yönlendirilen" izleme günlüğünde de görüntülenir. Kullanıcı bu işlemden sonra sonunda onaylanmadan kalır.
Burada neyin yanlış gidebileceği hakkında bir fikrin var mı? Ben burada
davetiye yaratılması için izleme günlüğü olduğunu ... günlükleri, başvurum kontrolörü ve aşağıda benim vasiyetle yapılandırma dahil ediyorum: İşteStarted POST "https://stackoverflow.com/users/invitation" for 127.0.0.1 at 2014-09-07 01:28:33 +0800
Processing by Devise::InvitationsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"BiIQ95wwdQz3CJ0+OoLOE9xHHvxhloHsRHrxsqf1D2Q=", "user"=>{"email"=>"[email protected]"}, "commit"=>"Invite User"}
User Load (4.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = 1 ORDER BY "users"."id" ASC LIMIT 1
Account Load (0.4ms) SELECT "public"."accounts".* FROM "public"."accounts" WHERE "public"."accounts"."subdomain" = 'mysubdomain' LIMIT 1
User Load (0.7ms) SELECT "users".* FROM "users" WHERE "users"."email" = '[email protected]' ORDER BY "users"."id" ASC LIMIT 1
User Load (0.7ms) SELECT "users".* FROM "users" WHERE "users"."invitation_token" = 'd1801fd8df78bd8cd125d5d8091fdc6a72c8f8faf4136cb282d497ec612195e9' ORDER BY "users"."id" ASC LIMIT 1
(0.1ms) BEGIN
SQL (0.5ms) INSERT INTO "users" ("created_at", "email", "invitation_created_at", "invitation_sent_at", "invitation_token", "invited_by_id", "invited_by_type", "updated_at") VALUES ($1, $2, $3, $4, $5, $6, $7, $8) RETURNING "id" [["created_at", "2014-09-06 17:28:34.296123"], ["email", "[email protected]"], ["invitation_created_at", "2014-09-06 17:28:34.294987"], ["invitation_sent_at", "2014-09-06 17:28:34.294987"], ["invitation_token", "d1801fd8df78bd8cd125d5d8091fdc6a72c8f8faf4136cb282d497ec612195e9"], ["invited_by_id", 1], ["invited_by_type", "User"], ["updated_at", "2014-09-06 17:28:34.296123"]]
(2.2ms) COMMIT
Rendered devise/mailer/invitation_instructions.html.erb (1.3ms)
Devise::Mailer#invitation_instructions: processed outbound mail in 23.5ms
Sent mail to [email protected] (26.0ms)
Date: Sun, 07 Sep 2014 01:28:34 +0800
From: [email protected]
Reply-To: [email protected]
To: [email protected]
Message-ID: <...>
Subject: Invitation instructions
Mime-Version: 1.0
Content-Type: text/html;
charset=UTF-8
Content-Transfer-Encoding: 7bit
<a href="http://mysubdomain.lvh.me:3000/users/invitation/accept?invitation_token=3GXDmi7NntDRdhvo57q5">Accept invitation</a>
Redirected to http://mysubdomain.lvh.me:3000/users
Completed 302 Found in 888ms (ActiveRecord: 10.0ms)
davetiye bağlantıyı izler izlemez izidir ... İşte
Started GET "https://stackoverflow.com/users/invitation/accept?invitation_token=3GXDmi7NntDRdhvo57q5" for 127.0.0.1 at 2014-09-07 01:28:38 +0800
Processing by Devise::InvitationsController#edit as HTML
Parameters: {"invitation_token"=>"3GXDmi7NntDRdhvo57q5"}
User Load (0.6ms) SELECT "users".* FROM "users" WHERE "users"."invitation_token" = 'd1801fd8df78bd8cd125d5d8091fdc6a72c8f8faf4136cb282d497ec612195e9' ORDER BY "users"."id" ASC LIMIT 1
Redirected to http://mysubdomain.lvh.me:3000/users/sign_in
Filter chain halted as :resource_from_invitation_token rendered or redirected
Completed 302 Found in 5ms (ActiveRecord: 0.6ms)
Started GET "https://stackoverflow.com/users/sign_in" for 127.0.0.1 at 2014-09-07 01:28:38 +0800
Processing by Devise::SessionsController#new as HTML
Account Load (0.4ms) SELECT "public"."accounts".* FROM "public"."accounts" WHERE "public"."accounts"."subdomain" = 'mysubdomain' LIMIT 1
Rendered devise/shared/_links.erb (0.7ms)
Rendered devise/sessions/new.html.erb within layouts/application (4.4ms)
Completed 200 OK in 21ms (Views: 16.6ms | ActiveRecord: 1.3ms)
iyi ölçmek için benim application_controller ... olduğunu
class ApplicationController < ActionController::Base
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :exception
before_filter :load_schema, :authenticate_user!, :set_mailer_host
before_filter :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:first_name, :last_name, :company, :email, :password, :password_confirmation, :remember_me, :image, :image_cache)}
devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:first_name, :last_name, :company, :email, :password_confirmation, :current_password, :image, :image_cache)}
end
private
def load_schema
Apartment::Database.switch('public')
return unless request.subdomain.present?
if current_account
Apartment::Database.switch(current_account.subdomain)
else
redirect_to root_url(subdomain: false)
end
end
def current_account
@current_account ||= Account.find_by(subdomain: request.subdomain)
end
helper_method :current_account
def set_mailer_host
subdomain = current_account ? "#{current_account.subdomain}." : ""
ActionMailer::Base.default_url_options[:host] = "#{subdomain}lvh.me:3000"
end
def after_sign_out_path_for(resource_or_scope)
new_user_session_path
end
def after_invite_path_for(resource)
users_path
end
end
İşte benim Devise başlatıcısı (config/ilklendiriciler/devise.rb), ben bu yardımcı olur, ama boşuna olmadığını görmek için "config.allow_insecure_token_lookup = true" satırını ekledikten ... Ben
Devise.setup do |config|
config.mailer_sender = '[email protected]'
require 'devise/orm/active_record'
config.case_insensitive_keys = [ :email ]
config.strip_whitespace_keys = [ :email ]
config.skip_session_storage = [:http_auth]
config.stretches = Rails.env.test? ? 1 : 10
config.reconfirmable = true
config.expire_all_remember_me_on_sign_out = true
config.password_length = 8..128
config.sign_out_via = :delete
config.allow_insecure_token_lookup = true
end