2011-05-15 5 views
0

몇 가지 도움을 받아이 코드를 사용하여 내 앱에서 구입 한 토큰을 생성합니다. 얼마나 많은 토큰이 주문되었는지에 따라 반복되며, create_trackable_token이라는 메서드를 호출하여 토큰을 식별하는 고유 한 문자열을 생성합니다. 이것에 대해 두 가지 질문이 있습니다.몇 가지 보안 및 오류 처리 문제가 있습니까?

1) 특정 열이 대량 할당에 취약하지 않도록 어떻게 다시 쓸 수 있습니까? 지금 당장이 모델에서 'attr_accessible'을 사용하면이 메서드에서 세 속성을 노출해야합니다. 한 번에 할당하기 때문입니다. 나는 그렇게하지 않는 것을 좋아한다. 메서드는 이미 보호되어 있으므로 최종 사용자가 메서드를 호출 할 수 없습니다.

2) 오류를 처리하는 가장 좋은 방법은 무엇입니까? 토큰은 고유해야하며 지금은 create_trackable_token 메서드가 이미 사용중인 문자열을 생성하면 어떻게 될지 잘 모르겠습니다. ActiveRecord이 처리하는지 또는 메서드에 오류 처리를 작성해야합니까? 고유성 처리 할 수 ​​

protected 
    def create_trackables 
     return unless self.success 
     order = Order.find(order_id) #you shouldn't need this line if it has_one :order 
     1.upto(order.total_tokens) do 
     Tracker.create!(
         :user_id => order.user_id, 
         :token => Tracker.create_trackable_token, 
         :order_id => order_id 
         ) 
     end 
    end 

답변

1

은 참조 열에 대한 유효성 검사를 사용 http://api.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html#method-i-validates_uniqueness_of

토큰을 생성 할 때 (예 : 당신이 생각하는하는 방법을 열심히 수행 등 고려해야 할 많은 일들이 있습니다 또는 그렇지 않으면 뭔가 다른 것에 대해 토큰을 인증합니까?) ... MD5, 난수와 같은 해시를 사용할 수도 있고, 모두 밖으로 나가서 GUID를 만들 수도 있습니다. 어쨌든 create_trackable_token에서 리턴하기 전에 토큰을 찾을 수 있습니다.

 
    Tracker.where(:token => generated_token).exists? 

당신은 몇 단계에서이 작업을 수행해야 할 안전 대량 할당을 유지하려면 다음

 
t = Tracker.create(
       :user_id => order.user_id, 
       :order_id => order_id 
      ) 
t.token = Tracker.create_trackable_token 
t.save! 
관련 문제