Я пытаюсь создать простое приложение iOS / Rails, в котором я могу создать пользователя и впоследствии аутентифицировать его с помощью BCrypt. Я пытался следовать инструкциям BCrypt, но мой процесс аутентификации не работает. Очень новичок в рельсах, поэтому я уверен, что напортачил с чем-то простым!
Чтобы создать нового пользователя:
В users_controller.rb
# POST /users
# POST /users.json
def create
@user = User.new(user_params)
@user.password = user_params[:password]
respond_to do |format|
if @user.save
format.html { redirect_to @user, notice: 'User was successfully created.' }
format.json { render :show, status: :created, location: @user }
else
format.html { render :new }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
def user_params
params.require(:user).permit(:username, :password)
end
В user.rb
def password
@password ||= Password.new(password_hash)
end
def password=(new_password)
@password = Password.create(new_password)
self.password_hash = @password
end
На сервере:
Запущен POST "/users.json" для 192.168.2.6 в 2014-08-21 19:32:05 -0500 Обработка UsersController # create as JSON Параметры: {"username" => "testtest", "password" => "[FILTERED]", "user" => {"username" => "testtest"}} (0,1 мс) начало транзакции Пользователь существует (20,8 мс) ВЫБРАТЬ 1 КАК ОТ "users" WHERE "users". " username "= 'testtest' LIMIT 1 Двоичные данные, вставленные для типа string
в столбце password_hash
SQL (0,8 мс) INSERT INTO" users "(" created_at "," password_hash "," updated_at "," username ") VALUES (?,?, ?,?) [["created_at", "2014-08-22 00: 32: 05.960378"], ["password_hash", "$ 2a $ 10 $ UzLdD7ytQXKRDU5MhAawJuFQ3R4oQlPyXh / V4GehNP692fsSpK6wK_at," 2014-08-29, "обновлено"] 22 00: 32: 05.960378 "], [" username "," testtest "]] (1,3 мс) транзакция фиксации Обработано users / show.json.jbuilder (0,3 мс) Завершено 201 Создано за 136 мс (Просмотры: 31,9 мс | ActiveRecord: 23,5 мс)
Аутентификация пользователя:
В sessions_controller.rb
def create
if @user = User.authenticate(params[:username], params[:password])
session[:user_id] = @user.id
render :show
else
flash.now[:alert] = "Invalid login/password combination"
render :action => 'fail'
end
end
В user.rb
def self.authenticate(username,password)
@user = User.find_by_username(username)
return @user.password == password
end
Сервер:
* Запущен POST "/ session" для 192.168.2.6 в 2014-08-21 19:38:26 -0500 Обработка SessionsController # create as / Параметры: {"username" => "testtest", "password" => "[FILTERED]", "session" => {"username" => "testtest", "password" => "[FILTERED]"}} Загрузка пользователя (0,2 мс) SELECT "users". * ОТ "users" ГДЕ "users". "Username" = 'testtest' LIMIT 1 Обработанные сеансы / fail.json.jbuilder (0,2 мс) Завершено 200 OK за 105 мс (Просмотры: 23,3 мс | ActiveRecord: 0,2 мс) *
Большое спасибо за понимание!