php登錄界面代碼php中插入以下PHP代碼只支持上傳圖片文件如何實(shí)現(xiàn)php注冊(cè)登錄代碼
2022-01-27
最近在開(kāi)發(fā)會(huì)員中心,總覺(jué)得有一些安全問(wèn)題。構(gòu)建到前臺(tái)的會(huì)員制也需要注意很多事情。有些漏洞可能暫時(shí)不會(huì)被注意到。這里有一些注意事項(xiàng)。
阻止用戶上傳某些類型的文件
將以下 PHP 代碼插入主題的 .php
add_filter('upload_mimes', 'custom_upload_mimes');function custom_upload_mimes( $existing_mimes=array() ) {// 注意中括號(hào)中的名稱,必須取自上面支持列表中中括號(hào)的名稱unset( $existing_mimes['exe'] ); //此處禁止了上傳exe后綴名的可運(yùn)行文件unset( $existing_mimes['jpg|jpeg|jpe'] ); //此處禁止了上傳jpg、jpeg和jpe后綴名的壓縮文件unset( $existing_mimes['gif'] ); //此處禁止了上傳gif后綴名的圖片文件unset( $existing_mimes['png'] ); //此處禁止了上傳png后綴名的圖片文件return $existing_mimes;}
只支持上傳圖片
如何只允許上傳圖片文件,拒絕上傳其他文件。實(shí)現(xiàn)方法很簡(jiǎn)單,我們可以在當(dāng)前主題的.php中插入如下PHP代碼:
// Add the filteradd_filter('upload_mimes', 'custom_upload_mimes');function custom_upload_mimes( $existing_mimes=array() ) {$existing_mimes = array('jpg|jpeg|jpe' => 'image/jpeg','gif' => 'image/gif','png' => 'image/png','bmp' => 'image/bmp','tif|tiff' => 'image/tiff','ico' => 'image/x-icon');return $existing_mimes;}
默認(rèn)角色用戶無(wú)法進(jìn)入后臺(tái)
如果不想讓默認(rèn)角色的用戶進(jìn)入后臺(tái),可以在當(dāng)前主題的.php中添加如下代碼,然后使用默認(rèn)角色的用戶賬號(hào)登錄
if ( is_admin() && ( !defined( 'DOING_AJAX' ) || !DOING_AJAX ) ) {$current_user = wp_get_current_user();if($current_user->roles[0] == get_option('default_role')) {wp_safe_redirect( home_url() );exit();}}
登錄支持
// 修改WordPress用戶名過(guò)濾機(jī)制,通過(guò) Email 獲取用戶名function ludou_allow_email_login($username, $raw_username, $strict) {if (filter_var($raw_username, FILTER_VALIDATE_EMAIL)) {$user_data = get_user_by('email', $raw_username);if (empty($user_data))wp_die(__('ERROR: There is no user registered with that email address.'), '用戶名不正確');elsereturn $user_data->user_login;}else {return $username;}}// 修改登錄界面的文字,"用戶名"改成"用戶名或郵箱"function ludou_change_text() {echo '';}if (in_array($GLOBALS['pagenow'], array('wp-login.php')) &&strpos($_SERVER['REQUEST_URI'], '?action=register') === FALSE &&strpos($_SERVER['REQUEST_URI'], '?action=lostpassword') === FALSE &&strpos($_SERVER['REQUEST_URI'], '?action=rp') === FALSE ) {add_filter('sanitize_user', 'ludou_allow_email_login', 10, 3);add_action('login_footer', 'ludou_change_text');}
支持中文用戶名
將以下PHP代碼復(fù)制到當(dāng)前主題目錄下的.php中,支持中文用戶名注冊(cè)登錄:
function ludou_non_strict_login( $username, $raw_username, $strict ) {if( !$strict )return $username;return sanitize_user(stripslashes($raw_username), false);}add_filter('sanitize_user', 'ludou_non_strict_login', 10, 3);
注冊(cè)成功后自動(dòng)登錄
讓用戶注冊(cè)成功后自動(dòng)登錄,跳轉(zhuǎn)到指定頁(yè)面,省去了用戶手動(dòng)登錄的步驟,提升了用戶體驗(yàn)。實(shí)現(xiàn)起來(lái)很簡(jiǎn)單,我們可以在當(dāng)前主題的.php中加入如下PHP代碼:
// 用戶注冊(cè)成功后自動(dòng)登錄,并跳轉(zhuǎn)到指定頁(yè)面function auto_login_new_user( $user_id ) {wp_set_current_user($user_id);wp_set_auth_cookie($user_id);// 這里設(shè)置的是跳轉(zhuǎn)到首頁(yè),要換成其他頁(yè)面// 可以將home_url()改成你指定的URL// 如 wp_redirect( 'http://www.newsky365.com' );wp_redirect( home_url() );exit;}add_action( 'user_register', 'auto_login_new_user' );
退出后跳轉(zhuǎn)到指定頁(yè)面
這個(gè)問(wèn)題也很容易解決,只需在當(dāng)前主題的.php中放入如下PHP代碼即可:
add_filter('logout_url', 'ludou_logout_redirect', 10, 2);function ludou_logout_redirect($logouturl, $redir) {$redir = 'https://www.wenjiangs.com/'; // 這里改成你要跳轉(zhuǎn)的網(wǎng)址return $logouturl . '&redirect_to=' . urlencode($redir);}
這樣網(wǎng)站開(kāi)發(fā),點(diǎn)擊后臺(tái)頁(yè)面右上角的退出后,即可跳轉(zhuǎn)到指定頁(yè)面。如果要在前臺(tái)添加注銷鏈接,點(diǎn)擊注銷并跳轉(zhuǎn)到指定站點(diǎn)頁(yè)面,可以使用如下代碼,代碼中的URL改成你的:
Logout
如果要跳轉(zhuǎn)到首頁(yè),可以使用如下代碼:
Logout
如果要跳轉(zhuǎn)到退出前所在的頁(yè)面,可以使用以下代碼:
Logout
最后一個(gè)也是一個(gè)很不錯(cuò)的功能
發(fā)布新文章通知用戶
很多博客都開(kāi)通了用戶注冊(cè)功能,用戶可以參與博客的內(nèi)容建設(shè),即一個(gè)博客由多個(gè)用戶共同撰寫(xiě)。現(xiàn)在有這樣一個(gè)需求php登錄界面代碼小程序開(kāi)發(fā),如何實(shí)現(xiàn)一個(gè)用戶發(fā)表文章后,其他用戶可以收到通知php登錄界面代碼,下面是實(shí)現(xiàn)方法:
在當(dāng)前主題目錄下的 .php 中,添加如下 PHP 代碼:
function newPostNotify($post_ID) {if( wp_is_post_revision($post_ID) ) return;global $wpdb;$get_post_info = get_post($post_ID);if ( $get_post_info->post_status == 'publish' && $_POST['original_post_status'] != 'publish' ) {// 讀數(shù)據(jù)庫(kù),獲取所有用戶的email$wp_user_email = $wpdb->get_col("SELECT DISTINCT user_email FROM $wpdb->users");// 郵件標(biāo)題$subject = 'xx博客有新文章';// 郵件內(nèi)容$message = '文章標(biāo)題:' . get_the_title($post_ID) . '
';$message .= '文章網(wǎng)址:' . get_permalink($post_ID) . '
';// 發(fā)郵件$message_headers = "Content-Type: text/html; charset=\"utf-8\"\n";wp_mail($wp_user_email, $subject, $message, $message_headers);}}// 鉤子一旦 WordPress 有新文章發(fā)布或文章被修改即刻執(zhí)行newPostNotify函數(shù)add_action('publish_post', 'newPostNotify');
有騷擾嫌疑,畢竟不是每個(gè)注冊(cè)用戶都想收到類似的郵件。