Laravel:未经授权即可提供页面

时间:2018-11-26 14:01:40

标签: php laravel

我在Laravel上有一个项目,页面很多。我想让我的页面之一即使对于未经授权的用户也可以使用。就像“登录”页面。例如,让所有人自由查看“ mysite.com/hello”页面的内容(它不是“登录”页面,但是拥有此链接的每个人都可以看到此页面的内容)。 您能告诉我如何使用路由/控制器在未经授权的情况下显示此页面吗?

5 个答案:

答案 0 :(得分:1)

在您的web.php

 Route::get('/hello','MyController@hello');   
 Route::get('/hello2','MyController@hello2');
 Route::get('/hi','MyController@hi');   

在您的MyController.php

  class MyController extends Controller
  {

   public function __construct()
   {
       $this->middleware('auth',['except'=>['hello','hello2']]);
   }

   // this function do not use auth middleware
   public function hello(){
       return response()->json(['hello'=>'hello page for all']);
   }

   public function hello2(){
       return response()->json(['hello2'=>'hello2 page for all']);
   }

   // this function use auth middleware
   public function hi(){

        // check if user is logged in ?

       if(Auth::check()){
           return response()->json(['hi'=>'hi page for logged user in only']);
       }else{
           // user is not logged in 
           return response()->json(['hi'=>'please login to see content']);
           // redirect back to login 

           // return redirect('/login');
       }
   }

  }

答案 1 :(得分:0)

正如评论中提到的,除非您使用中间件保护路由,否则默认情况下每个页面都是公共的,因此对于您的页面,只要返回的视图如下,就可以在路由中进行操作:

Route::get('/hello', function() {
    return view('index'); // the index.blade.php should exist inside resources/views directory
});

确保不要将此路由放在任何组中,就像它在web.php文件中一样。

答案 2 :(得分:0)

检查具有此功能的控制器文件

让我们说函数是using System; using System.Collections.Generic; using System.Text; using Windows.Foundation; using Windows.UI.Xaml.Controls; public class MyCustomPanel : Panel { protected override Size MeasureOverride(Size size) { return base.MeasureOverride(size); } }

然后在您的类构造函数中向您好添加hello();函数

except

查看laravel文档https://laravel.com/docs/5.7/controllers#controller-middleware

答案 3 :(得分:0)

看看如何定义路由来访问您的页面。默认情况下,每个人都可以使用它。

您可能会看到一条路线:

Route::middleware('auth')->get('/pages/{slug}')->uses('PageController@show');

然后,例如,您可以拥有一些不受保护或对登录用户不可用的特定子弹:

Route::get('/pages/for-everyone')->uses('PageController@show');
Route::middleware('guest')->get('/pages/not-for-logged-in')->uses('PageController@show');
Route::middleware('auth')->get('/pages/{slug}')->uses('PageController@show');

您也可以在控制器中定义中间件,在这种情况下,您需要按控制器方法而不是按路线取消保护。

答案 4 :(得分:0)

谢谢大家! 我已经解决了我的问题。在我的Controller类中,我找到了以下行:

$this->middleware('admin')

因此,我在其中添加了例外:

->except('hello')

有效。