Laravel实现点击显示手机号:仅登录用户可见,未登录跳转登录页
实现带登录权限的手机号显示功能
嘿,我来帮你把这个权限控制逻辑加上!核心思路就是在「显示手机号」的点击事件里先判断用户登录状态,分情况处理:
核心逻辑步骤
- 点击按钮时,先检查用户是否已登录
- 已登录:正常显示手机号元素(可以顺便把按钮文字改成「隐藏手机号」做交互优化)
- 未登录:弹出指定提示消息,然后跳转到登录页面
关键提醒:别只依赖前端验证!
前端的登录状态判断很容易被篡改,所以一定要在后端同步做校验,比如用户直接通过接口或URL访问手机号内容时,后端要拦截未登录请求,确保数据安全。
不同场景的代码示例
1. 纯前端(原生JS)场景
假设你的页面通过全局变量或Cookie获取登录状态(比如window.isLoggedIn):
// 获取DOM元素 const showPhoneBtn = document.getElementById('show-phone-btn'); const phoneElement = document.getElementById('phone-number'); // 绑定点击事件 showPhoneBtn.addEventListener('click', function() { if (window.isLoggedIn) { // 已登录:切换手机号显示状态 const isHidden = phoneElement.style.display === 'none'; phoneElement.style.display = isHidden ? 'block' : 'none'; showPhoneBtn.textContent = isHidden ? '隐藏手机号' : '显示手机号'; } else { // 未登录:提示+跳转 alert("In order to view this phone number you must be logged in"); window.location.href = '/login'; // 替换成你的登录页路径 } });
2. 后端渲染场景(以Flask为例)
如果是后端模板渲染的页面,建议在后端处理登录校验和Flash消息:
后端路由代码
from flask import Flask, render_template, redirect, url_for, flash, session, request @app.route('/your-page', methods=['GET', 'POST']) def your_page(): show_phone = False if request.method == 'POST' and request.form.get('action') == 'show_phone': # 检查登录状态(这里用session判断,根据你的登录逻辑调整) if 'user_id' not in session: flash("In order to view this phone number you must be logged in") return redirect(url_for('login')) show_phone = True return render_template('your-page.html', show_phone=show_phone)
前端模板代码
<form method="POST"> <button type="submit" name="action" value="show_phone"> {{ '隐藏手机号' if show_phone else '显示手机号' }} </button> </form> <!-- 手机号元素 --> <div id="phone-number" style="display: {{ 'block' if show_phone else 'none' }}"> {{ user_phone }} <!-- 替换成实际的手机号变量 --> </div> <!-- 显示Flash提示消息 --> {% with messages = get_flashed_messages() %} {% if messages %} {% for msg in messages %} <div class="alert alert-warning">{{ msg }}</div> {% endfor %} {% endif %} {% endwith %}
3. 单页应用场景(以React为例)
用React的话,可以结合路由和全局状态管理(比如Context)来处理:
import { useState } from 'react'; import { useAuth } from '../contexts/AuthContext'; // 自定义的登录状态Context import { useNavigate } from 'react-router-dom'; import { toast } from 'react-toastify'; // 用toast库显示提示,更友好 const PhoneNumberSection = () => { const { isLoggedIn } = useAuth(); const navigate = useNavigate(); const [isPhoneVisible, setIsPhoneVisible] = useState(false); const handleTogglePhone = () => { if (isLoggedIn) { setIsPhoneVisible(prev => !prev); } else { toast.error("In order to view this phone number you must be logged in"); navigate('/login'); } }; return ( <div className="phone-section"> <button onClick={handleTogglePhone}> {isPhoneVisible ? '隐藏手机号' : '显示手机号'} </button> {isPhoneVisible && <div className="phone-number">{user.phone}</div>} </div> ); }; export default PhoneNumberSection;
内容的提问来源于stack exchange,提问作者Douggy Budget
相关产品推荐
相关产品推荐

