小弟使用 Laravel 一段時間,但還沒使用過 Sanctum,想請問如何使用,並且下載 excel 檔。
現有一個需求:
某網站由其它廠商建立,非 laravel 系統。在前台架構不變的情況下,我這邊用 laravel 另外建一套管理系統。我的 laravel 後台可以下載 excel 。例如進入訂單管理的頁面,點擊 匯出,可以彈出 modal 視窗,選 xlsx, csv, 還可以選語言(標題)。我使用 laravel excel 。
後台的前端程式碼
<script>
//Export
$('#button-export-save').on('click', function () {
var dataString = $('form').serialize();
$.ajax
({
type: "POST",
url: "/new-admin/exports/sales/orders",
data: dataString,
cache: false,
xhrFields:{
responseType: 'blob'
},
success: function(data)
{
var link = document.createElement('a');
link.href = window.URL.createObjectURL(data);
link.download = 'orders.' + ext;
link.click();
$('#modal-option').modal('hide');
},
});
});
</script>
非常的 ok ,還不錯。
現在說,要在前台讓某些會員,例如公司的業務,下載訂單 excel 。要使用前台而不是後台。前後台共享同一套資料庫。
該怎麼做呢?
拜了 google 大神。還在想解法。
比如說登入,說用 sanctum 還是會需要登入,用帳號、密碼登入。這個我就有疑問。難道要把帳號密碼寫在前台的ajax呼叫?
http://abc.test/api/sales/orders?user=peter&password=1234
使用者打密碼的時候都還要以星號呈現,不太可能這樣明碼顯示。而且這不是登入頁,此時沒有密碼。不可能要使用者另外重打一次。把密碼寫入session好像也沒看到有人這樣做。
我想到的做法是,
<inputh type="hidden" name="csrf" value="">
。我發問的時候還沒實作,只是覺得這樣應該可以。但是這樣好像跟 Sanctum 關係不大?是這樣用嗎?有其它方式嗎?
然後,我這還是前後台共享同一套資料庫的情況。如果根本就是兩套不同系統,不同資料庫,不同站台。A站台如何對B站台要求excel檔案?
首先,第一個想法是可以的。
也就是在登入的同時。也一起取得另一個站的登入權限或証書存放。
當然了,如就單一功能來說。其實這也不是很好的做法。但總是一種做法。
第二
一般API請求理論上不該會有CSRF的問題。
如果會有CSRF問題的話,這也代表你原來的請求並非是API式的應用。
最後,一般如果要直接做下載。並需要有認証的情況。
大多數來說我會做二次演算的方式。
或是加密模式。
也研是說,你可能需要送「user=peter&password=1234」
這是碼我會利用一下可還原加密的方式。
如BASE64等方法。將要送的值加密後再傳。
但雖這樣說,可是前端加密也是一件很笨的事。
畢竟啥都看光光了。
這時就只好用兩階段取得了。
第一次請求先拿到對應的KEY或加密碼。
再用取得的KEY去取檔案。
當然,這個KEY要有時效性。且在生成KEY要有安全機制。如驗証來源IP或域名等等。