凤凰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
我认为你有一条矛盾的路线。通过以这种方式使用resources
,您将创建一条路线,该路线期望将ID附加到路径的末尾。即DELETE /api/auth/3
。
您将受益于正常的DELETE /api/auth
或DELETE /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控制器注销功能。
这是什么部分不起作用?你有没有可以分享的错误? –
错误说“找不到DELETE/api/auth(AdminApi.Router)的路由” – AJP
如果您运行'mix phx.routes',那里是否列出了?你有没有尝试重新启动你的凤凰服务器? –