2017-06-21 2 views
1

LogoutボタンがフェニックスのテンプレートにあるPhoenixアプリケーションで作成されたログアウトシステムを持っています(下の3つのコードスニペット参照)。これは正常に動作します。フェニックスJSON API - コントローラで正しい機能を呼び出すように経路を設定する

フェニックステンプレート:/web/templates/layout/app.html.eex

<%= link "Logout", to: auth_path(@conn, :delete), method: :delete, class: "btn btn-danger" %>

フェニックスルート:/web/router.ex

関連するルートはルートを削除します。

scope "/auth", AdminApi do 
 
    pipe_through :browser 
 

 
    get "/:provider", AuthController, :index 
 
    get "/:provider/callback", AuthController, :callback 
 
    delete "/logout", AuthController, :delete 
 
end

フェニックスコントローラ:/web/controllers/auth_controller.ex

def delete(conn, _params) do 
 
    conn 
 
    |> put_flash(:info, "You have been logged out!") 
 
    |> configure_session(drop: true) 
 
    |> redirect(to: "/") 
 
end

私は同じことを実現しようとしているが、としています別のフロントエンドとP JSON APIとしてのhoenix

アイデアは、フロントエンドはAJAXは、関連するAPIエンドポイントに要求をDELETEなることですし、ルートは、そのコールをキャッチし、auth_controllerで削除機能を起動します。

ルートを設定してコントローラ内の関連する機能を起動するにはどうすればよいですか?

PS CORSプラグは、など他のルートのために働いているように私は、それがCORSの問題ではありません確信している「/ AUTH /:プロバイダ」の下

は、私がこれまで持っているものです。

フロントエンドからAJAX要求

var url = ENV.apiProtocol + ENV.apiHost + "/api/auth"; 
 
Ember.$.ajax({ 
 
    url : url, 
 
    type: "DELETE", 
 
    success: function(response){ 
 
    console.log(response) 
 
    }, 
 
    error: function(response) { 
 
    console.log(response) 
 
    } 
 
});

フェニックスルート:/web/router.ex

scope "/api", AdminApi do 
 
    pipe_through: api 
 

 
    resources "/auth/:provider", AuthController, except: [:new, :edit] 
 
    resources "/auth", AuthController, except: [:new, :edit] 
 

 
end

フェニックス・コントローラ:/web/controllers/auth_controller.ex

def delete(conn, _params) do 
 
    conn 
 
    |> put_flash(:info, "You have been logged out!") 
 
    |> configure_session(drop: true) 
 
    |> redirect(to: "/") 
 
end

+0

これはどの部分がうまくいかないのですか?あなたが共有できるエラーが出ていますか? –

+0

エラーが「DELETE/api/auth(AdminApi.Router)のルートが見つかりません」と表示されます – AJP

+2

'mix phx.routes'を実行すると、リストされているものがありますか?あなたはあなたのphoenixサーバを再起動しようとしましたか? –

答えて

1

あなたは矛盾するルートがあると思います。このようにしてresourcesを使用すると、パスの最後にIDが追加されることが予想されるルートを作成しています。私。 DELETE /api/auth/3

あなたが通過しようとしているトークンがセッションを破壊したいと思っている場合は、通常のDELETE /api/authまたはDELETE /api/sessionのルートを使用すると効果があります。

0

解決策が見つかりました。私はルート内のリソースを定義していたので、フェニックスはエンドポイント/api/auth:idにDELETE要求を出すことを期待していました。

ウェブ/ router.exで私は今、AJAXは、認証コントローラ内のエンドポイント/api/auth/logout火災ログアウト機能への要求をDELETE

delete "auth/logout", AuthController, :delete

resources "/auth", AuthController, except: [:new, :edit]

を変え。

関連する問題