Когда кто-то посещает сайт, в контроллере приложения автоматически создается учетная запись пользователя:
before_action :create_user
def create_user
unless current_user
logger.info "Creating User"
@user = User.new()
@user.save
sign_in @user
end
end
В файле session_controller.rb это действие следует пропустить:
skip_before_action :create_user
Чтобы люди могли войти в систему, им необходимо выйти из гостевой учетной записи и войти в свою новую учетную запись:
<%= link_to('login as another user', "javascript: logout(); signin();", :class => "dropdown-item") %>
function logout() {
var xhr = new XMLHttpRequest();
xhr.open("DELETE", `/users/sign_out`);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send();
}
function signin() {
var xhr = new XMLHttpRequest();
xhr.open("GET", `/users/sign_in`);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send();
}
Проблема в том, что новая учетная запись создается, когда кто-то нажимает на кнопку «Войти как другой пользователь»:
Started DELETE "/users/sign_out" for 127.0.0.1 at 2019-07-01 16:21:54 +0200
Processing by Devise::SessionsController#destroy as HTML
Parameters: {"authenticity_token"=>"rE1vsdcujWtmQLcmkkD7wqfDbnCgtXBffKTOs7WHQF34oK8DngKtigmTecnToqWMCkHw8qzdjESbnkAvTEEqwQ=="}
User Load (0.7ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT $2 [["id", 44], ["LIMIT", 1]]
(0.5ms) BEGIN
(0.4ms) COMMIT
Redirected to http://localhost:3000/users/sign_in
Completed 302 Found in 17ms (ActiveRecord: 1.6ms)
Started GET "/users/sign_in" for 127.0.0.1 at 2019-07-01 16:21:54 +0200
Processing by Devise::SessionsController#new as HTML
Creating User
(0.4ms) BEGIN
SQL (3.3ms) INSERT INTO "users" ("created_at", "updated_at") VALUES ($1, $2) RETURNING "id" [["created_at", "2019-07-01 14:21:54.575423"], ["updated_at", "2019-07-01 14:21:54.575423"]]
(24.2ms) COMMIT
(0.3ms) BEGIN
SQL (0.6ms) UPDATE "users" SET "sign_in_count" = $1, "current_sign_in_at" = $2, "last_sign_in_at" = $3, "current_sign_in_ip" = $4, "last_sign_in_ip" = $5, "updated_at" = $6 WHERE "users"."id" = $7 [["sign_in_count", 1], ["current_sign_in_at", "2019-07-01 14:21:54.608076"], ["last_sign_in_at", "2019-07-01 14:21:54.608076"], ["current_sign_in_ip", "127.0.0.1"], ["last_sign_in_ip", "127.0.0.1"], ["updated_at", "2019-07-01 14:21:54.609110"], ["id", 45]]
(0.5ms) COMMIT
Rendering devise/sessions/new.html.erb within layouts/application
Rendered devise/shared/_links.html.erb (1.1ms)
Rendered devise/sessions/new.html.erb within layouts/application (5.1ms)
Completed 200 OK in 73ms (Views: 28.4ms | ActiveRecord: 29.2ms)
EDIT:
Я добавил это в rout.rb, как предложил Deep и Sergio:
devise_for :users, :controllers => {
:sessions => "users/sessions"
}
Я больше не вижу "создание пользователя" в журналах.
Однако я получаю эту ошибку на странице входа в систему:
undefined method `login' for #<User:0x00007f4ef2e60468>