2013-05-07 2 views
0

В моем проекте проект обеспечивает регистрацию пользователя/аутентификацию для панели администратора. Мне нужно добавить метод API, который будет подписывать user_in и возвращать JSON со статусом + cookie сеанса.Rails Devise с обычной авторизацией и API

routes.rb

devise_for :user, :controllers => {sessions: 'sessions'} 

Controller Session

class SessionsController < Devise::SessionsController 
    skip_before_filter :verify_authenticity_token 

    def create 
    resource = warden.authenticate!(:scrope => resource_name, :recall => "#{controller_path}#failure") 
    sign_in(resource_name, resource) 

    respond_to do |format| 
     format.html { respond_with resource, :location => after_sign_in_path_for(resource) } 
     format.json { render json: {:success => 1}} 
    end 
    end 

Если я буду размещать данные пользователя/sign_in.json, он будет оказывать { "успех": 1}, который является точно, что я необходимость.

Но вопрос в том, как переместить пользователя/sign_in.json на какой-то пользовательский URL-адрес, например/api/sign_in?

ответ

0

Surround маршрут в пространстве имен:

namespace :api do 
    devise_for :user, :controllers => {sessions: 'sessions'} 
end 
+0

Это создаст все схемы разработки внутри: api namespace/api/user /. Мне нужен только 1 метод/api/sign_in –

+0

@RuslanSavenok Вы можете использовать 'skip', чтобы использовать только те, которые вы хотите:' skip: [: registrations,: unlocks,: passwords,: confirmations] ' –

+0

С таким подходом i все равно будет 2 маршрута, которые мне не нужны. Получить/sign_in/сделать визу в форме Получить/sign_out/вывести пользователя Добавлено мое решение ниже. –

0

ли это так:

api_controller.rb

def create_session 
    resource = User.find_for_database_authentication(:email => params[:user][:email]) 

    if resource.nil? 
     render :json=> {:success => 0, :error => "No Such User"}, :status=>401 
    else 
     if resource.valid_password?(params[:user][:password]) 
     sign_in(:user, resource) 
     render :json=> {:success => 1} 
     else 
     render :json=> {:success => 0, :error => "Wrong Password"}, :status=>401 
     end 
    end 
    end 

routes.rb

namespace :api do 
    namespace :v1 do 
     get :sign_in, :to => 'api#create_session' 
    end 
    end 
Смежные вопросы