2015-03-02 5 views
1

Я строю API-интерфейс rails с проверкой подлинности и пытаюсь проверить логин с помощью curl. В конечном итоге я хочу войти в систему с помощью мобильного приложения и получить токен аутентификации. Я в настоящее времяRails API login using curl

# api/sessions_controller.rb 
class Api::SessionsController < Api::BaseController 
    skip_before_filter :verify_authenticity_token 

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

    if @user && @user.valid_password?(params[:password]) 
     @user.generate_authentication_token 

     render :json=> {:user_id=>@user.id, :token=>@user.authentication_token} 
     else 
     error! :unauthenticated 
     end 
    end 

    private 

    def user_params 
     params.require(:user).permit(:email, :password) 
    end 
end 

Я делаю curl -i -X POST -d "user[email][email protected]&user[password]=password" "http://localhost:3000/api/sessions"

но Войти неудачен

HTTP/1.1 401 Unauthorized 
X-Frame-Options: SAMEORIGIN 
X-Xss-Protection: 1; mode=block 
X-Content-Type-Options: nosniff 
Content-Type: application/json; charset=utf-8 
Cache-Control: no-cache 
X-Request-Id: 5d84cbb4-28d3-48fb-bfce-a29d0f40569d 
X-Runtime: 0.029000 
Server: WEBrick/1.3.1 (Ruby/2.1.5/2014-11-13) 
Date: Mon, 02 Mar 2015 02:29:32 GMT 
Content-Length: 61 
Connection: Keep-Alive 
Set-Cookie: request_method=POST; path=/ 

{"error":"You need to sign in or sign up before continuing."} 

Пожалуйста, дайте мне знать, если у вас есть какие-либо предложения. Благодаря!

+0

вы можете попробовать, как это '' завивать -i -X ​​POST -d "пользователь [электронная почта] '[email protected]'&user [пароль] =' = пароль '" "HTTP: // локальный: 3000/api/sessions "' ' – coderhs

+0

Он по-прежнему дает тот же ответ – user3610962

+0

Попробуйте следующее:' 'curl -i -X ​​POST -d [user] [email protected]" -d "user [password] = password «http: // localhost: 3000/api/sessions» '' – coderhs

ответ

0

Измените код следующим образом. Ваш код ссылается на неправильные параметры.

@user = User.find_for_authentication(email: params[:user][:email]) 

    if @user && @user.valid_password?(params[:user][:password]) 
     @user.generate_authentication_token 
+0

Не работает. Можете ли вы объяснить, почему эти параметры должны работать? – user3610962

+0

Поскольку параметры передаются с помощью хеша пользователя. Прежде чем код будет работать, вы должны отправить его как '' email = user @ user.com и password = password.'', но поскольку мы используем '' user [: email] '', мы должны изменить наш код, чтобы принять '' PARAMS [: пользователь] [: электронная почта] ''. Не знаю, почему это изменение не сработало. Можете ли вы проверить журнал рельсов, чтобы узнать, как отправляются параметры? – coderhs

+0

'Обработка Api :: SessionsController # create as JSON Параметры: {" user "=> {" email "=>" [email protected] "," password "=>" [FILTERED] "}} Завершено 401 Неавторизованный в 1ms' – user3610962