2014-09-26 3 views
3

Мне нужно перенаправить пользователей на абсолютный URL-адрес после аутентификации oAuth.Абсолютные URL-адреса маршрута с кольцом и Compojure

Как создать абсолютный URL для маршрута Compojure? Похоже, что HTTP-запросы, отличные от AJAX, не содержат заголовок Origin. Есть ли вспомогательная функция Ring или Compojure для создания абсолютных URL-адресов, или я должен делать это вручную со схемой и заголовками Host?

Наконец, и, вероятно, заслуживает отдельного вопроса, есть ли вспомогательные функции в Compojure для генерации URL маршрутов на основе обработчика, ala Html.ActionLink(...) на земле MVC?

ответ

4

Проект ring-headers имеет middleware, преобразующий по отношению к абсолютным адресам:

(ns ring.middleware.absolute-redirects 
    "Middleware for correcting relative redirects so they adhere to the HTTP RFC." 
    (:require [ring.util.request :as req]) 
    (:import [java.net URL MalformedURLException])) 

(defn- url? [^String s] 
    (try (URL. s) true 
     (catch MalformedURLException _ false))) 

(defn absolute-url [location request] 
    (if (url? location) 
    location 
    (let [url (URL. (req/request-url request))] 
     (str (URL. url location)))))