2016-04-03 141 views
-1

因此,當談到註冊/登錄以及電子郵件時,我有點兒不高興。我的問題是我想要製作驗證郵件。我已經有了一個正常運行的電子郵件,當你點擊註冊按鈕時會發送給你(如果你想查看它是rediku.com)。問題是電子郵件最初使其具有帶有隱藏字段的表單,該隱藏字段具有可用於識別用戶並驗證它們的生成令牌。不幸的是,電子郵件客戶端會阻止郵件中的表單。所以我不得不求助於使用錨鏈接。如何驗證新帳戶

基本上,我的問題是...我如何通過向他們發送帶有鏈接的電子郵件來驗證特定的個人帳戶?

+0

檢查一些您看到了用於提示激活的。只需發送一個參數爲'yoursite.com/verify.php?token = sometokenhere'的鏈接,在該頁面上驗證令牌(如果未過期)。 – JimL

+0

這方面你有什麼問題?你試過什麼了? – NineBerry

+0

我試過用我的令牌使用隱藏的表單標籤,但不幸的是電子郵件客戶端阻止...我不知道甚至從這樣的事情開始。 – joeldesante

回答

0

我假設你在你的網站上有註冊表格。 我假設你正在將數據發送到名爲performRegistration.php的文件。

內performRegistration.php:

// TBD sanitizing input data 
$newUser = new User(); // I am assuming you build a class for your users 
$newUser->setVerified(false); 
// TBD save form data to user object 
// generate a custom key for new user 
$newUser->setRegisterKey = MD5('someSaltString'.date('u')); // very basic! 
$newUser->save(); // validate data (like user already registered, and stuff like that) and save to db 
$newUser->sendRegistrationMail(); // I like libs like swiftmailer 

由於@JimL指出,你應該使用令牌的基礎環節。 我會做這樣的:yoursite.com/verify.php?verify[username]=aUsername&verify[token]=theMd5TokenGenerated 這樣你可以查找您的數據庫中的用戶名,並檢查生成相應的密鑰。如果您不想在鏈接中添加(唯一)用戶名,那麼如果您想在驗證過程中查找數據集,則必須確保兩個用戶不會獲得相同的註冊碼。

內verify.php:

// TBD catch $_GET and sanitize data 
$getVars = $_GET['verify']; 
if(array_key_exists('token', $getVars)){ 
    if(!empty($_GET['token']) && !empty($_GET['username'])) { 
     // TBD get user from db where username and key match the submitted values from the link 
     // if you can find a matching dataset: 
     $newUser->setVerified(true); 
     // start a session, add a cookie, login user 
     // do some great stuff 
    } 
} 
+1

雖然這是非常基本的。請考慮使用庫和框架來關心這樣的東西。有很多安全的東西需要考慮...... – Hafenkranich

+0

當我嘗試從url獲取GET標記變量,並運行if(empty($ _ GET ['token'])){}'它是空的。 – joeldesante

+0

鏈接是什麼樣的? – Hafenkranich