- предисловие: игнорируйте, если хотите.
Я новичок в rails и работаю над проектом, который потребует аутентификации пользователя.
Я нашел этот учебник и пытался пройти через него и понять, что происходит. Конечно, это не совсем то, что мне нужно, как есть, так что я изменяюсь по мере продвижения вперед. Учебник также устарел в некоторых областях, поэтому, конечно, мне пришлось обновить мой код. Так что часть моей проблемы в том, что я не уверен, что ошибка в моих модификациях, или какая-то функция, которая устарела, или что.
- вопрос
Это (самый простой) тест, который не проходит. («Ожидается, что не будет ноль» в первом утверждении assert.)
def test_authentication
#check we can log in
post :login, :user => { :username => "bob", :password => "test" }
assert_not_nil session[:user_id]
assert_equal users(:bob).id, session[:user_id]
assert_response :redirect
assert_redirected_to :action => 'welcome'
end
Вызывает логин действия user_controller:
def login
if request.post?
if session[:user_id] = User.authenticate(params[:user][:username], params[:user][:password])
flash[:message] = "Login succeeded!"
redirect_to_stored
else
flash[:warning] = "Login failed."
end
end
end
, который вызывает метод User для аутентификации. Однако я знаю, что аутентификация работает правильно, потому что у меня есть один тест, который проходит:
def test_registration
#check that we can register and are logged in automatically
post :register, :user => { :username => "newuser", :password => "pass", :password_confirmation => "pass", :email => "newuser@web.com" }
assert_response :redirect
assert_not_nil session[:user_id]
assert_redirected_to :action => 'welcome'
end
, который вызывает регистр действий user_controller
def register
@user = User.new(params[:user])
if request.post?
if @user.save
session[:user_id] = User.authenticate(@user.username, @user.password)
flash[:message] = "Registration succeeded"
redirect_to :action => 'welcome'
end
else
flash[:warning] = "Registration failed"
end
end
, который успешно вызывает аутентификацию.
пользовательский прибор имеет одну соответствующую запись:
bob:
username: bob
email: bob@mcbob.com
hashed_password: 77a0d943cdbace52716a9ef9fae12e45e2788d39 # test
salt: 1000
Я проверил хешированный пароль и соль - "test" - правильный пароль.
Итак, по моему анализу, ошибка должна быть в одном из 3 мест:
как я отправляю свой почтовый запрос,
как я получаю доступ к параметрам в действии входа в систему,
или какой-то аспект загрузки прибора.
(первоначально я использовал код учебника для явной загрузки прибора (self.use_instantiated_fixtures = true; fixtures: users), но я прочитал, что все приборы автоматически загружаются перед тестированием, поэтому я его вынул. изменить вещь.)
Конечно, поскольку я не могу найти проблему в этих областях, она может быть точно так же и где-либо еще.