凤凰JSON API - 配置路由调用正确的函数在控制器

问题描述:

我这是在凤凰app,其中注销按钮是在凤凰城的模板,如通过以下三个代码片段建立一个注销系统。这工作正常。凤凰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 DELETE请求相关的API端点,然后路线抓住这一呼吁并触发在auth_controller删除功能。

如何配置路由,使之火在控制器中的相关功能?

PS我敢肯定它不是一个CORS问题,因为CORS插头正在为其他途径,例如“/ auth /中:供应商”

下面是我到目前为止有:

从前端

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) 
 
    } 
 
});

AJAX请求条

凤凰路线:/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',那里是否列出了?你有没有尝试重新启动你的凤凰服务器? –

我认为你有一条矛盾的路线。通过以这种方式使用resources,您将创建一条路线,该路线期望将ID附加到路径的末尾。即DELETE /api/auth/3

您将受益于正常的DELETE /api/authDELETE /api/session路由,您传递的令牌表示您想要销毁其会话的用户。

我找到了解决办法。我在路由中定义了一个资源,因此Phoenix预计将对端点/api/auth:id发出DELETE请求。

网/ router.ex我改变

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

delete "auth/logout", AuthController, :delete

现在一个AJAX DELETE请求到端点/api/auth/logout火灾AUTH控制器注销功能。