Как создать пользователя, когда кто-то еще не вошел в систему, но все же позволяет людям войти в систему, если у них уже есть учетная запись? - PullRequest
0 голосов
/ 01 июля 2019

Когда кто-то посещает сайт, в контроллере приложения автоматически создается учетная запись пользователя:

  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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...