所有操作拆成 「准备工作→分步操作→验证效果」 三个阶段,每一步都标注清楚操作位置和注意事项,你跟着做就行:

一、准备工作(必看!)

  1. 工具准备
    • 服务器管理工具(如宝塔面板,90% 的小白都用这个)
    • 电脑端浏览器(Chrome/Edge)
    • 文本编辑器(记事本就行,不用装复杂软件)
  2. 核心前提
    • 你能登录服务器 / 宝塔面板
    • 能找到独角数卡的安装目录
    • 知道数据库的账号密码(宝塔面板里能看)

二、分步操作(全程复制粘贴,零代码基础也能会)

步骤 1:给数据库添加密码字段(宝塔面板操作)

    1. 登录宝塔面板 → 找到左侧「数据库」→ 点击你独角数卡用的数据库(比如dujiaoka)→ 点击「SQL」标签。
    2. 清空输入框里的默认内容,复制下面的代码粘贴进去,点击「执行」
      ALTER TABLE `article` 
      ADD COLUMN `need_password` TINYINT(1) DEFAULT 0 COMMENT '是否需要密码访问 0-否 1-是' AFTER `content`,
      ADD COLUMN `password` VARCHAR(255) NULL COMMENT '文章访问密码' AFTER `need_password`;​
    3. 执行成功会提示「运行成功」,如果提示报错,大概率是表名不对(比如你的文章表不是article,可以问开发者或看数据库里的表名)。

步骤 2:添加密码验证页面(新建文件)

      1. 宝塔面板 → 左侧「文件」→ 找到独角数卡的安装目录(比如/www/wwwroot/dujiaoka)→ 进入resources/views/hyper/目录。
      2. 点击「新建文件」,文件名填:article_password.blade.php,点击「创建」。
      3. 打开新建的文件,清空默认内容,复制下面的代码粘贴进去保存
        @extends('hyper.layouts.default')
        @section('content')
        <div class="row justify-content-center mt-5">
            <div class="col-md-6 col-lg-4">
                <div class="card shadow-sm border-0 rounded-lg">
                    <div class="card-header bg-primary text-white text-center">
                        <h4 class="mb-0">🔒 文章加密访问</h4>
                    </div>
                    <div class="card-body p-4">
                        <h5 class="text-center mb-4">{{ $article->title }}</h5>
                        
                        @if($error)
                        <div class="alert alert-danger alert-dismissible fade show" role="alert">
                            {{ $error }}
                            <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
                        </div>
                        @endif
                        
                        <form method="POST" action="{{ url('/article/'.$article->id) }}">
                            @csrf
                            <div class="mb-3">
                                <label class="form-label">请输入访问密码</label>
                                <div class="input-group">
                                    <span class="input-group-text">🔑</span>
                                    <input type="password" name="article_password" class="form-control" 
                                           placeholder="输入密码解锁文章" required>
                                </div>
                            </div>
                            <button type="submit" class="btn btn-primary w-100 py-2">
                                验证并访问
                            </button>
                        </form>
                    </div>
                    <div class="card-footer text-center text-muted">
                        <small>密码有效期:2小时 | 如有问题请联系管理员</small>
                    </div>
                </div>
            </div>
        </div>
        @endsection
        
        @section('js')
        <script>
        document.querySelector('input[name="article_password"]').addEventListener('keydown', function(e) {
            if (e.key === 'Enter') {
                document.querySelector('form').submit();
            }
        });
        </script>
        @endsection​

        步骤 3:修改文章详情控制器(核心逻辑)

        1. 宝塔面板 → 「文件」→ 进入app/Http/Controllers/Hyper/目录(如果没有 Hyper 文件夹,就找ArticleController.php所在目录)。
        2. 找到ArticleController.php文件,右键「编辑」,清空原有内容,复制下面的代码粘贴(如果原有文件有其他代码,保留原有use开头的行,只替换show方法):
          <?php
          namespace App\Http\Controllers\Hyper;
          
          use App\Models\Article;
          use Illuminate\Http\Request;
          use Illuminate\Support\Facades\Session;
          use Illuminate\Support\Facades\Hash;
          use Illuminate\Routing\Controller as BaseController;
          
          class ArticleController extends BaseController
          {
              // 文章详情页(带密码验证)
              public function show(Request $request, $id)
              {
                  // 查询文章
                  $article = Article::with('category')->findOrFail($id);
                  
                  // 判断是否需要密码访问
                  if ($article->need_password == 1 && !empty($article->password)) {
                      $sessionKey = 'article_auth_' . $article->id;
                      
                      // 检查是否已授权
                      if (!Session::get($sessionKey)) {
                          // 处理密码提交
                          if ($request->isMethod('post')) {
                              $inputPass = $request->input('article_password', '');
                              // 验证密码(简单验证,小白版)
                              if ($inputPass == $article->password) {
                                  // 授权2小时
                                  Session::put($sessionKey, true, 7200);
                                  return redirect()->to('/article/'.$article->id);
                              } else {
                                  return view('hyper.article_password', [
                                      'article' => $article,
                                      'error' => '密码错误,请重新输入!'
                                  ]);
                              }
                          }
                          
                          // 显示密码页
                          return view('hyper.article_password', [
                              'article' => $article,
                              'error' => ''
                          ]);
                      }
                  }
                  
                  // 无需密码/已授权,显示文章
                  return view('hyper.article', [
                      'article' => $article
                  ]);
              }
          
              // 保存文章(含密码设置)
              public function store(Request $request)
              {
                  $data = $request->all();
                  // 处理密码
                  if (isset($data['need_password']) && $data['need_password'] == 1) {
                      $data['need_password'] = 1;
                      // 直接保存明文密码(小白版,简单易操作)
                      $data['password'] = $data['password'] ?? '';
                  } else {
                      $data['need_password'] = 0;
                      $data['password'] = null;
                  }
                  
                  // 保留原有保存逻辑(下面这行根据你原有代码调整,不懂就保留)
                  Article::updateOrCreate(['id' => $data['id'] ?? null], $data);
                  
                  return redirect()->back()->with('success', '文章保存成功!');
              }
          }​

          步骤 4:修改文章详情页模板(添加加密标识)

          1. 找到你提供的article.blade.php文件(resources/views/hyper/目录下),右键「编辑」,替换成下面的代码:
            @extends('hyper.layouts.article')
            @section('content')
            <div class="row">
                <div class="col-12">
                    <div class="card">
                        <div class="card-body">
                            <div class="card-title">
                                <a href="/article">首页</a>->
                                <a href="/article?cat_id={{$article['category_id']}}">
                                    {{$article['category']['category_name']}}
                                </a>-> {{ $article['title'] }}
                            </div>
                            <hr>
                            <div class="blog-content">
                                <div class="blog-post">
                                    <h3 class="blog-post-title text-center">
                                        {{ $article['title'] }}
                                        <!-- 加密文章显示标识 -->
                                        @if($article['need_password'] == 1)
                                        <span class="badge bg-danger ms-2">加密</span>
                                        @endif
                                    </h3>
                                    <p class="blog-post-meta text-right">
                                        日期:{{ $article['updated_at'] }}
                                    </p>
                                    <div class="mt-4">
                                        {!! $article['content'] !!}
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
            @stop​
             

          步骤 5:后台添加密码设置项(文章编辑页)

          1. 找到后台文章编辑的模板文件(通常是resources/views/admin/article/edit.blade.phpcreate.blade.php),在表单末尾添加下面的代码:
            <!-- 密码访问设置 -->
            <div class="form-group mt-4">
                <label class="form-label fs-6">
                    <input type="checkbox" name="need_password" value="1" 
                           @if(isset($article) && $article->need_password == 1) checked @endif>
                    开启密码访问
                </label>
            </div>
            
            <div class="form-group" id="password_input" style="display: @if(isset($article) && $article->need_password == 1) block @else none @endif;">
                <label class="form-label">访问密码</label>
                <input type="password" name="password" class="form-control" 
                       placeholder="设置文章访问密码" value="">
                <div class="form-text text-muted mt-1">设置后访问该文章需要输入此密码</div>
            </div>
            
            <script>
            // 勾选后显示密码框
            document.querySelector('input[name="need_password"]').addEventListener('change', function() {
                const passwordInput = document.getElementById('password_input');
                passwordInput.style.display = this.checked ? 'block' : 'none';
            });
            </script>

            步骤 6:文章列表页添加加密标识(可选)

            找到你文章列表的卡片代码(循环显示文章的地方),在标签区域添加:
            <!-- 加密标识 -->
            @if($article['need_password'] == 1)
            <span class="card-tag" style="background: #dc3545; color:white;">加密</span>
            @endif​