2013-07-22 3 views
1

Я пытаюсь сделать это:Rails Разрабатывают найти пользователя по аутентификации маркера

класс NotesController < ApplicationController

Индекс четкости

@user = User.find_by_authentication_token (PARAMS [: маркер])

@notes = @ user.notes

...

Но я получаю сообщение об ошибке:

Started POST "/api/login" for 10.0.0.4 at 2013-07-22 13:20:43 +0300 
Processing by Api::LoginController#login as JSON 
    Parameters: {"user"=>{"password"=>"[FILTERED]", "email"=>"[email protected]"}, "login"=>{"user"=>{"password"=>"[FILTERED]", "email"=>"[email protected]"}}} 
    User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."email" = '[email protected]' LIMIT 1 
    User Load (1.0ms) SELECT "users".* FROM "users" WHERE "users"."authentication_token" = 'GFRWkkLCq3xQx5rTRTFp' LIMIT 1 
Completed 200 OK in 119ms (Views: 0.0ms | ActiveRecord: 3.0ms) 


Started GET "/notes?token=GFRWkkLCq3xQx5rTRTFp" for 10.0.0.4 at 2013-07-22 13:20:44 +0300 
Processing by NotesController#index as JSON 
    Parameters: {"token"=>"GFRWkkLCq3xQx5rTRTFp", "note"=>{}} 
    User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."authentication_token" = 'GFRWkkLCq3xQx5rTRTFp' LIMIT 1 
Completed 500 Internal Server Error in 1ms 

NoMethodError (undefined method `notes' for nil:NilClass): 
    app/controllers/notes_controller.rb:7:in `index' 

Как вы можете видеть, код

User.find_by_authentication_token(params[:token]) 

держит возвращение ноль.

+0

Вашей ошибка 'неопределенный метод' отмечает для ноля: NilClass' означает, что вы получаете нулевого пользователя – Debadatt

+0

Я знаю. Вопрос в том, почему? Как вы видите, я посылаю токен, который я только что получил второй раз .. – Igor

+1

запустил тот же sql в вашем db или запустил консоль rails. Если вы получаете действительную учетную запись пользователя? – Debadatt

ответ

0

Фигурного это: Проблема заключалась в том, что я забыл сохранить (фиксацию) пользователь после метода user.ensure_authentication_token

def login 
    user = User.find_for_database_authentication(:email => params[:user][:email]) 
    if user.nil? 
     render :json => {:result => 'ERROR'} 
    else 
     if user.valid_password?(params[:user][:password]) 
     user.ensure_authentication_token 
     user.save 
     render :json => {:result => user.authentication_token} 
Смежные вопросы