2016-03-18 17 views
0

Multi_user Rails 4.2 uygulamasında, bir kullanıcı oturum açtığında bir kullanıcı belirteci kaydetmeye gerek vardır. İşte burada iki yöntem ekleyerek düşündüğüm bir çözümdür yakut iplikle User modeli: Çok kullanıcılı bir kullanıcı jetonu Kaydet Ruby Thread

class User < ActiveRecord::Base 
    def self.current_token=(token) 
    Thread.current[:current_token] = token 
    end 

    def self.current_token 
    Thread.current[:current_token] 
    end 
end 

bir kullanıcı, oturum açarken onun/onu belirteci (belirteç oluşturulduktan varsayıyorum) @user.current_token = token tarafından atanır. Ben,

1. is token above thread safe and will never be changed (by another user, or overwritten by another user's token) during the `@user`'s session lifetime? 
2. is `User.current_token` available everywhere inside the Rails app (as long as `User` is accessible)? 

cevap

1
  1. parçacığı yerel yazma ÅŸan olmasına rağmen: Geç app, current_token Ben iplik yakut yeni am User.current_token

    tarafından alınan ve onaylamak için birkaç şey vardır edilebilir asla değişmeyeceğine güvenmezdi. Bazı sunucular istekleri tamamlandıktan sonra iş parçacığı yerellerini temizler. Bkz. https://github.com/puma/puma/blob/61294479b2f77a838f0d91064ca6d4ed5ba4b9ff/lib/puma/thread_pool.rb#L48

  2. User.current_token, uygulamanın her yerinde sabit Kullanıcı yüklenecektir.

Bu yaklaşımı bir belirteci saklamak için önermem. Simgeyi, ona ihtiyacı olan kişiye açıkça iletmenizi tavsiye ederim. testine

  1. kolay
  2. Kod hakkında akıl daha kolaydır (Kullanıcı sınıfı yerel bir iş parçacığı saplama için yok): Bu kod yapar. Jetonun tam olarak nereden geldiğini biliyorsun. Biz oturumda belirteci sağlamayı denedi beklenmedik garip parçacığı böcek
+0

için az eğilimli

  • . Ancak MVC modeli, modelin oturum kullanımını teşvik etmemektedir. – user938363

  • +0

    Burada gerçekleştirmeye çalıştığınız şey hakkında biraz daha bilgi sahibi olmalıyım. Bu durumda belirtecin saklanması amacı nedir? – ianks

    +0

    Eğer web sunucusu yerel ipliği kendi başına temizlemeye başlarsa, bu kötü olurdu. Token, kullanıcıyı gruptan gruba ayırmak için kullanılır (şirket demek). Kullanıcıya özgü değil, gruba özgüdür. Yani jeton, belirli gruba ait modeldeki bilgileri almak için kullanılır. – user938363

    İlgili konular