【问题标题】:Laravel route to custom function in controller does not workLaravel 路由到控制器中的自定义函数不起作用
【发布时间】:2017-02-01 05:33:05
【问题描述】:

laravel 5.3

我正在尝试使按钮或链接在 AdminController 中执行激活功能,但每当我单击该按钮时,它都会给我 404 页面说它找不到 AdminController@activate。

当我从函数中使用 dd() 时,它什么也不做。

如果您需要任何其他信息,请说出来,我绝不是 laravel 专家 :-)

管理中间件

use Closure;
use Illuminate\Support\Facades\Auth;

class admin
{
    /**
    * Handle an incoming request.
    *
    * @param  \Illuminate\Http\Request  $request
    * @param  \Closure  $next
    * @return mixed
    */
   public function handle($request, Closure $next)
   {
       if (Auth::check() && Auth::user()->level == 2)
       {
           return $next($request);
       }
       return abort(401, 'Unauthorized');
   }
}

网络路由

Route::group(['middleware' => ['auth.admin']], function() {
    Route::resource('admin', 'AdminController');
    Route::get('/admin/{id}/delete', 'AdminController@delete');
    Route::get('/admin/activate', 'AdminController@activate');
});

管理员控制器

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\User;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Hash;

class AdminController extends Controller
{       

    public function activate(){
       $users = User::where('active', 0)->get();
       $users->active = 1;
       $users->timestamps = false;
       $users->update();
       $users->timestamps = true;
       return redirect('admin');
   }
}

HTML/刀片

<a href="{{ url('/admin/activate') }}"><span class="glyphicon glyphicon-cog" aria-hidden="true">Activate all</span></a> <br>
    @foreach ($data['inactiveusers'] as $user)
        {{$user->firstname}} {{$user->surname}}
        <a href="{{ url('/admin/' . $user->id .'/edit') }}"><span class="glyphicon glyphicon-cog" aria-hidden="true"></span></a>
        <a href="{{ url('/admin/' . $user->id .'/delete') }}"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span></a>
        <br>
    @endforeach

【问题讨论】:

  • 在 HTML 中,指定方法为 GET。
  • 他正在使用一些链接,所以他不应该指定任何方法
  • 调试:将/admin/activate移出中间件,直接尝试访问
  • @SulthanAllaudeen 很棒的电话,显然中间件有问题,因为我可以在它之外访问它。由于某种原因,我无法执行 auth::check() 并在同一 if 语句中检查用户级别
  • 您确定请求来自经过身份验证的来源,即用户在访问 url 时是否已登录?

标签: php laravel


【解决方案1】:

laravel middleware 不会让未经身份验证的用户访问受保护的 url。

我该如何解决这个问题?

确保用户已通过您请求的网址的身份验证

提示:

将 /admin/activate 移出中间件并尝试直接访问。它应该工作

最糟糕的黑客攻击:

您可以在 Kernal.php 中的 middlewareGroups 中禁用此功能,但不建议这样做。

【讨论】:

    猜你喜欢
    • 2016-12-14
    • 2015-10-17
    • 2015-03-01
    • 2015-06-10
    • 1970-01-01
    • 1970-01-01
    • 2018-09-14
    • 2020-06-25
    • 2012-06-19
    相关资源
    最近更新 更多