2016-10-27 44 views
0

我有一個控制器發送一個變量數組的電子郵件,其中包括人的名字和他們提出請求的時間戳。該電子郵件發送一個html文件,並在html文件中有一個「點擊此處刪除bla bla bla」。線。當用戶點擊鏈接時,鏈接會將它們發送給控制器,該控制器將從我的數據庫中刪除其名稱。如何在電子郵件中創建自己的「取消訂閱」按鈕?

現在,我不完全確定我應該如何做到這一點。我能明顯做這樣的事情:

Click <a href='https://xxx.xx.xxx.xxx:8000/web/misc/request/delete/<?php echo $data['timestamp']; ?>/<?php echo $data['name']; ?>'> here</a> to delete bla bla bla. 

然後,在我的路由文件,我將有:

Route::get('/web/misc/request/delete/{time}/{name}', '[email protected]'); 

然後我就可以查詢我的數據庫的名稱和時間戳,和中提琴,刪除。

但有人可以很容易地編輯URL中的名稱或時間戳,對嗎?

這使我想使用POST,但我不完全確定在這種情況下我該怎麼做。我可以創建一個表單,將一些輸入設置爲隱藏,然後將名稱和時間戳存儲到這些輸入值中。我還沒有嘗試過這個,因爲它聽起來很哈克。 在這種情況下使用會話也不起作用,對吧? 這是使用cookie的好時機嗎?或者我應該使用某種鍵?

+0

您在每個用戶的網址中包含一個唯一的ID,這是不可能/不切實際的猜測。或者,您可以通過電子郵件確認取消訂閱。 – deceze

+0

一種方法是每發送一封電子郵件,你將創建一個唯一的ID或GUID,並將其放入數據庫中,並將其附加到URL中,然後查詢您的數據庫以查找該條目。他們不太可能會隨機更改指導並匹配其他條目。 – Chris

+0

我絕不是一個專家,但如何爲每個電子郵件地址存儲一個隨機字符串,當你想刪除,檢查該字符串是否正確提供的網址? – lucidbrot

回答

4

但有人可以很容易地編輯URL中的名稱或時間戳,對吧?

這讓我想用POST

這不會幫助。您仍然完全依賴於客戶控制下的數據。


生成隨機的字母數字字符串以使用標識符。將其與關於訂閱用戶的其餘數據一起存儲在數據庫中。將其包含在URL中。

當請求進入時,請檢查電子郵件地址是否已取消訂閱,並與數據庫中的確認字符串匹配。

相關問題