Регистрация колдовства не проходит - PullRequest
0 голосов
/ 23 января 2012

Я пытаюсь использовать драгоценный камень Sorcery для аутентификации пользователей, но после заполнения регистрационной формы он перенаправляет обратно на страницу регистрации с ошибкой.Однако я могу создать пользователя из консоли.

файл журнала:

Started POST "/users" for 127.0.0.1 at 2012-01-23 13:54:12 -0500
Processing by UsersController#create as HTML
Parameters: {"utf8"=>"✓",     "authenticity_token"=>"Rh6R5rwLu+XchOv3ki9iATgihU8hqr84y4AcQbyKFyI=", "user"=>  {"username"=>"testusername", "email"=>"testemail@email.com", "password"=>"[FILTERED]"}, "commit"=>"Register"}
[1m[35m (0.1ms)[0m  SELECT 1 FROM "users" WHERE "users"."username" = 'testusername' LIMIT 1
[1m[36m (0.1ms)[0m  [1mSELECT 1 FROM "users" WHERE "users"."email" = 'testemail@email.com' LIMIT 1[0m
Rendered users/new.html.erb within layouts/application (2.1ms)
Completed 200 OK in 29ms (Views: 17.1ms | ActiveRecord: 0.3ms)

users_controller.rb

class UsersController < ApplicationController
    def new
        @user = User.new
    end

    def create
        @user = User.new(params[:user])

        if @user.save
            redirect_to 'Static#index', :notice => "Thanks for registering!"
        else
            render :new
        end
    end
end

models / user.rb:

class User < ActiveRecord::Base
   authenticates_with_sorcery!

  attr_accessible :username, :email, :password
  validates_presence_of :username
  validates_presence_of :password, :on => :create
  validates_presence_of :email
  validates_length_of :password, :minimum => 7
  validates_length_of :username, :minimum => 10
  validates_uniqueness_of :username
  validates_uniqueness_of :email
end

config / initializers / sorcery.rb:

Rails.application.config.sorcery.submodules = []

Rails.application.config.sorcery.configure do |config|

config.user_config do |user|

end

config.user_class = "User"
end

миграция волшебства:

class SorceryCore < ActiveRecord::Migration
    def self.up
        create_table :users do |t|

            t.string :username,         :null => false
            t.string :email,            :default => nil
            t.string :crypted_password, :default => nil
            t.string :salt,             :default => nil
            t.timestamps

        end
    end

    def self.down
        drop_table :users
    end
end

Ответы [ 3 ]

1 голос
/ 20 февраля 2012

Единственное, что здесь бросается в глаза, это поле password. Он имеет значение attr_accessible, которое следует использовать только в том случае, если поле находится в вашей базе данных. Волшебство, как и большинство решений для аутентификации, не будет хранить необработанный пароль в базе данных, что вы можете увидеть из файла миграции, который не содержит поля password.

Вместо этого используйте виртуальный атрибут для password, чтобы необработанная строка никогда не сохранялась:

attr_accessor :password
attr_accessible :username, :email

Фактический пароль будет зашифрован в процессе Волшебства и сохранен в поле crypted_password.

С этой настройкой все ваши проверки будут работать.

0 голосов
/ 13 сентября 2012

Что у вас в пользовательском / новом виде?

Не забывайте, что у вас есть проверки длины на: username и: password.

может быть, вы можете сделать:

attr_accessible \
  :username,
  :email,
  :password,
  :password_confirmation
0 голосов
/ 24 января 2012

То, что вам нужно увидеть в файле журнала, более или менее таково:

   (0.1ms)  SELECT 1 FROM "users" WHERE "users"."username" = 'testusername' LIMIT 1
   (0.1ms)  SELECT 1 FROM "users" WHERE "users"."email" = 'bogusbogus@bogusbogus.com' LIMIT 1
Binary data inserted for `string` type on column `crypted_password`
  SQL (3.7ms)  INSERT INTO "users" ("created_at", "crypted_password", "email", "salt", "updated_at", "username") VALUES (?, ?, ?, ?, ?, ?)  [["created_at", Mon, 23 Jan 2012 20:39:46 UTC +00:00], ["crypted_password", "$2a$10$za6RqGnvHpAiNASQ86NCl.t/LyrGn1U1wHfzQ3X9f/NJYjY/ramJG"], ["email", "bogusbogus@bogusbogus.com"], ["salt", "xxRspPQysvq5yzp7xpFh"], ["updated_at", Mon, 23 Jan 2012 20:39:46 UTC +00:00], ["username", "testusername"]]

Если вы не видите инструкцию INSERT, это означает, что данные не прошли валидацию.Может быть, вы пытаетесь добавить другого пользователя с тем же именем пользователя или адресом электронной почты?В противном случае это должно работать.Попробуйте создать пользователя в консоли rails:

irb> u = User.create username: 'testusername', ........
irb> u.errors.full_messages

Возвращает ли оно какие-либо сообщения?

РЕДАКТИРОВАТЬ: Извините, я только что заметил ваше обновление, где вы написали, что вы можете создать пользователя в консоли,Из файла журнала, похоже, параметры в порядке.Вы сказали, что перенаправляет на новую страницу с ошибкой.Что говорит эта ошибка?

...