首页 > 解决方案 > 如何允许访客用户查看帖子,而无需登录

问题描述

我正在尝试让访客用户,即未登录的用户查看某些帖子。

我尝试添加访客身份验证,但它不起作用。我也很乐意将帖子的 URL 链接作为 slug 而不是 ID

例如 localhost:8000/news/1 应该是 localhost:8000/news/post-title

<?php

namespace App\Http\Controllers;

use App\News;
use Illuminate\Http\Request;

class NewsController extends Controller
{
    function __construct()
    {
        $this->middleware('auth', ['except' => ['index']]);
    }

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {

        $news= News::paginate(15);
        return view('categories.news',compact('news'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('news.create');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //validate

        $this->validate($request,[
            'subject'=>'required|min:10',
            'body' => 'required|min:20'
        ]);

        //store
        auth()->user()->news()->create($request->all());

        //redirect
        $news= News::paginate(15);
        return view('categories.news', compact('news'));
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\News  $news
     * @return \Illuminate\Http\Response
     */
    public function show(News $news)
    {
        return view('news.single', compact('news'));
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\News  $news
     * @return \Illuminate\Http\Response
     */
    public function edit(News $news)
    {
        return view('news.edit', compact('news'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\News  $news
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, News $news)
    {
        if(auth()->user()->id !== $news->user_id){
            abort(401, "Please Login");
        }

        $this->validate($request,[
            'subject'=>'required|min:10',
            'body' => 'required|min:20'
        ]);

        $news->update($request->all());

        return redirect()->route('news.show', $news->id)->withMessage('News Updated');
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\News  $news
     * @return \Illuminate\Http\Response
     */
    public function destroy(News $news)
    {   
        if(auth()->user()->id !== $news->user_id){
            abort(401, "Please Login");
        }

        $news->delete();

        $news= News::paginate(15);
        return view('categories.news', compact('news'));
    }
}

这是我希望来宾用户能够查看的单个帖子刀片。

<div class="main-body">
        <div class="clearfix">
            <div class="main-body-content text-left">
                <h1 style="font-size: 20px;font-weight: 800;" class="post-title">{{$news->subject}}</h1>
                <h5>By <a href="">{{ Auth::user()->name }}</a></h5>
                <div class="post-body">
                    <p>{!! $news->body !!}</p>
                </div>
                @if(auth()->user()->id==$news->user_id)
                <div class="all-edit">
                <div class="post-body">
                    <a href="{{route('news.edit',$news->id)}}">(Edit)</a>
                </div>
                <div class="delete">
                    <form action="{{route('news.destroy',$news->id)}}" method="POST">
                        {{csrf_field()}}
                        {{method_field('DELETE')}}
                        <input type="submit" value="Delete">
                    </form>
                </div>
                </div>
                @endif
            </div>
        </div>
    </div>

标签: laravel-5

解决方案


您必须从“auth”的中间件中删除此路由。


推荐阅读