2014-01-15 2 views
1

Я использую приложение Devise в Rails 3 для аутентификации пользователей. Это приложение также предоставляет ответы API на мобильное приложение. Я читал, что Разрабатывает удалил их маркер функции аутентификации по разным причинам, и я реализовал это в моем приложении на основе этой сущности: https://gist.github.com/josevalim/fb706b1e933ef01e4fb6API-маршруты для аутентификации маркера Devise

class ApplicationController < ActionController::Base 
    protect_from_forgery 

    # before_filter :authenticate_user_from_token! 
    before_filter :authenticate_user! # Devise's default auth 

    private 

    def authenticate_user_from_token! 
    user_email = params[:user_email].presence 
    user  = user_email && User.find_by_email(user_email) 

    if user && Devise.secure_compare(user.authentication_token, params[:user_token]) 
     sign_in user, store: false 
    end 
    end 

end 

Вот первая часть контроллера, отвечающих за ответы API:

class ApiController < ApplicationController 

    before_filter :cors_preflight_check 
    after_filter :cors_set_access_control_headers 

    before_filter :authenticate_user_from_token! 

    # For all responses in this controller, return the CORS access control headers. 

    def cors_set_access_control_headers 
    headers['Access-Control-Allow-Origin'] = '*' 
    headers['Access-Control-Allow-Methods'] = 'POST, GET, PUT, OPTIONS' 
    headers['Access-Control-Max-Age'] = "1728000" 
    end 

    # If this is a preflight OPTIONS request, then short-circuit the 
    # request, return only the necessary headers and return an empty 
    # text/plain. 

    def cors_preflight_check 
    if request.method == :options 
     headers['Access-Control-Allow-Origin'] = '*' 
     headers['Access-Control-Allow-Methods'] = 'POST, GET, PUT, OPTIONS' 
     headers['Access-Control-Allow-Headers'] = 'X-Requested-With, X-Prototype-Version' 
     headers['Access-Control-Max-Age'] = '1728000' 
     render :text => '', :content_type => 'text/plain' 
    end 
    end 

    ... (response methods) 

И мои маршруты для HTTP запросов:

scope(:path => '/api/v1.0/') do 
    match '/candidates' => "api#candidates" 
    match '/districts' => "api#districts" 
    match '/articles' => "api#articles" 

    match '/candidates/:id' => "api#candidate" 
    match '/districts/:id' => "api#district" 
    match '/articles/:id' => "api#article" 

    match '/search' => "api#search" 
end 

Как создать маршруты для входа в систему с помощью API (пользователь отправляет запрос с адрес электронной почты и пароль и получает токен)?

ответ

1

Что вы подразумеваете под «Как создать маршруты»? Возможно, вы хотите создать класс с методом проверки электронной почты и пароля, который возвращает токен, например.

class Tokens < ApplicationController 

    def create 

     @user = User.find_by_email(params[:email]) 
     # Check for password too!! 

     if @user && @user.valid_password?(params[:password]) 
      render status: 200, json: { token: @user.authentication_token } 
     else 
      render status: 411, json: { error: "Error message..." } 
     end 
    end 
end 

И, наконец, добавить к вашим маршрутам:

post '/tokens' => "tokens#create" 

Надеется, что это помогает.

Смежные вопросы