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