Я использую Devise с Ruby on Rails для разработки игры.
Пользователи могут войти в систему и присоединиться к игре.
При первом входе все нормально - это видночто они вошли как ожидаемый человек.
Но очень редко я замечал (как в реальном мире, так и один раз в тестировании) ситуацию, которая меня поражает.
Внезапно один изпользователи «становятся» другим пользователем.Как будто они вошли в систему как другой пользователь.Они имеют полный доступ к своей учетной записи, и Rails считает, что они вошли в систему как другой пользователь.Все, такие как «current_user.name» и «current_user.email», принадлежат другому пользователю, тому, к которому они ранее не входили, и пользователю, которому они не разрешены.
Iне могу понять, откуда в моем коде это может быть.Я не хочу публиковать здесь весь мой код, поэтому я надеялся на мозговой штурм , как можно было бы даже вызвать что-то подобное в моем коде - или я более вероятенглядя на ошибку devise, когда devise портит сессию, которую он возвращает при определенных условиях гонки?
С последним немного сложнее иметь дело с точки зрения общей безопасности для любого сайта, который использует devise, но я полагаю, что кто-то ещевидел бы это сейчас.Поэтому я полагаю, что это должно быть в моем коде - но нигде в моем коде я не касаюсь информации о сеансе, и при этом я никогда не делаю ничего странного, например, присваиваю current_user чему-либо.
Чтобы было очень ясно, что происходит:
- «Боб» регистрируется на своем устройстве как «Боб» и видит, что он «Боб» (current_user.name) и имеет доступ к вещам «Боба».
- »Джо "входит в систему на своем устройстве как" Джо "и видит, что он" Джо "(current_user.name) и имеет доступ к вещам" Джо ".
- После перехода по одному из любого количества внутренних ссылок (чтоне изменяйте / не устанавливайте информацию о пользователе), устройство, которое использует «Джо», теперь отображается как «Боб» (current_user.name) и имеет доступ к вещам «Боба» (например, редактирование страницы своего профиля и т. д. -все защищено current_user).
Есть мысли о том, чего мне не хватает?
Мои настройки устройства позволяют входить по электронной почте / паролю, а также через oauth через Facebook и т.п.
-
В соответствии с просьбой, приведено следующее описание устройства:
-
class DeviseCreateUsers < ActiveRecord::Migration
def change
create_table(:users) do |t|
## Database authenticatable
t.string :email, null: false, default: ""
t.string :encrypted_password, null: false, default: ""
## Recoverable
t.string :reset_password_token
t.datetime :reset_password_sent_at
## Rememberable
t.datetime :remember_created_at
## Trackable
t.integer :sign_in_count, default: 0, null: false
t.datetime :current_sign_in_at
t.datetime :last_sign_in_at
t.string :current_sign_in_ip
t.string :last_sign_in_ip
## Confirmable
t.string :confirmation_token
t.datetime :confirmed_at
t.datetime :confirmation_sent_at
t.string :unconfirmed_email # Only if using reconfirmable
## Lockable
# t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts
# t.string :unlock_token # Only if unlock strategy is :email or :both
# t.datetime :locked_at
t.timestamps
end
add_index :users, :email, unique: true
add_index :users, :reset_password_token, unique: true
# add_index :users, :confirmation_token, unique: true
# add_index :users, :unlock_token, unique: true
end
end