私は、ユーザーがアカウントを登録するための単純な php/mysql ソリューションを永遠に探していました。これは、管理者がログインする前に承認を求めるリクエストを管理者に送信します。これは可能ですか?もしそうなら簡単ですか?
チュートリアルと以前の質問を探していましたが、まだどこにも行きません! 正常に登録されましたが、管理者の電子メールにリクエストを送信することを理解できませんでした...
ありがとう
私は、ユーザーがアカウントを登録するための単純な php/mysql ソリューションを永遠に探していました。これは、管理者がログインする前に承認を求めるリクエストを管理者に送信します。これは可能ですか?もしそうなら簡単ですか?
チュートリアルと以前の質問を探していましたが、まだどこにも行きません! 正常に登録されましたが、管理者の電子メールにリクエストを送信することを理解できませんでした...
ありがとう
is_approved
ユーザーテーブルに列を追加することで、簡単に実装できます。
ユーザーが登録するとき、このフィールドをfalse
デフォルトで に設定します。
新しい登録に関するメールを管理者に送信し、ユーザーを承認するには、 に変更is_approved
するだけtrue
です。
もちろん、ユーザーがログインしようとしたときにこの値を確認し、false の場合はアクセスを拒否する必要があります。
適切なリソースは、必要なことを正確に実行するコードを含む sfGuardパッケージです。
ユーザー テーブルに BOOLEAN カラムを追加し、user_approved
デフォルトで 0 に設定できます。
新しいユーザーが登録したら、PHP メール機能を使用して承認を求めるメールを管理者に送信します。
$to = 'admin@yourwebsite.com';
$subject = 'User needs approval';
$message = 'The user {username} needs your approval' .
'----------------------------------- ' . "\r\n" .
'Accept: ' . $accept_link . "\r\n" .
'Decline: ' . $decline_link . "\r\n";
$_headers = 'From:admin@yourwebsite.com' . "\r\n"; // Set FROM headers
mail($to, $subject, $message, $headers); // Send the email
accept_link
andは、 PHP ハッシュ関数decline_link
を使用して生成できます。
たとえば、SHA512 ハッシュを使用できます。
$accept_link = "yourwebsite.com/approval.php?e=" . $email . "&h=" . hash('sha512', 'ACCEPT');
$decline_link = "yourwebsite.com/approval.php?e=" . $email . "&h=" . hash('sha512', 'DECLINE');
PHP スクリプトでは、 get変数を確認して、管理者が登録要求を受け入れるか拒否するかを確認approval.php
するだけです。
$hash = $_GET['h'];
$email = $_GET['e'];
if($hash == hash('sha512', 'ACCEPT')){
//ACCESS MYSQL DATABASE
//FIND THE USER AND SET user_approved = 1
//WHERE email = $email
}else if($hash == hash('sha512', 'DECLINE')){
//MAIL THE USER NOTIFYING THAT THE ACCOUNT HAS NOT BEEN APPROVED
}
管理者に電子メールを送信する場合、PHP には mail() 関数があります: http://php.net/manual/en/function.mail.php
#given $email, $user
$mail_success = mail("admin@mysite.net","User Registration awating approval","User ".$user." has registered and is on the waiting list.\n User's email: ".$email);
if(!$mail_success) { echo "Warning: Mail delivery failed"; }
複数の電子メールを送信する場合、mail() 関数はまったく効率的ではないことに注意してください。