【问题标题】:Comment with Auth in laravel在 laravel 中用 Auth 评论
【发布时间】:2018-11-09 17:51:03
【问题描述】:

我希望用户仅在登录时发表评论。否则会出现一个masege '您必须登录才能发表评论'。如果我登录它可以工作,如果不是它不只是重定向回来! 我解决了。问题是 PostCommentsController 位于管理员中间件中,您必须登录才能查看您是否是管理员。如果你没有登录重定向到索引。

控制器:

public function store(Request $request)
{
    if (Auth::check()) {
        $user = Auth::user();
        $data = [
            'post_id' => $request->post_id,
            'author' => $user->name,
            'email' => $user->email,
            'body' => $request->body
        ];
        
        Comment::create($data); 
        $request->session()->flash('comment_success','Your comment have been submited and is waiting moderation');
        return redirect()->back();
    } else {            
        $request->session()->flash('login','You must be logged in to post a comment');
        return redirect('/login')->back();
    }       
}

【问题讨论】:

  • 我只是想澄清一下,如果用户没有登录,用户会被重定向到登录页面吗?
  • 是的,我的 else 语句中有 plus ->back() 。所以我改变了 return redirect('/login');但不起作用。如果我没有登录,则重定向回有几个帖子的索引页面。

标签: php laravel authentication comments


【解决方案1】:
public function store(Request $request)
{
    if (!Auth::check()) { 
        $request->session()->flash('login', 'You must be logged in to post a comment');
        return redirect()->back();
    }

    $user = Auth::user();
    $data = [
        'post_id' => $request->post_id,
        'author' => $user->name,
        'email' => $user->email,
        'body' => $request->body
    ];

    if (Comment::create($data)) {
        $request->session()->flash('comment_success', 'Your comment have been submitted and is waiting moderation');
        return redirect()->back(); 
    } 

    $request->session()->flash('comment_error', 'Your comment does not submited. Try again!!');
    return redirect()->back();
}

【讨论】:

  • 你不会重定向到哪里??
  • 查看https://laravel.com/docs/5.5/responses中的所有可用方法
  • 我想重定向到哪里并不重要(我试过 /login,register)。如果我没有登录总是重定向到索引页面。并且闪信也没有出现(您必须先登录才能发表评论)
  • 使用https://github.com/laracasts/flash来显示肉体消息的简单方法
【解决方案2】:

在您的 else 语句中,只需使用此代码 return redirect('/login'); 使用 back() 函数将用户重定向回来。

【讨论】:

    【解决方案3】:

    Laravel 有内置的 Auth 系统,如果你使用它,你可以使用像我项目中的示例这样的构造函数。

    public function __construct()
    {
        $this->middleware('auth');
    }
    

    这只是说用户在没有登录的情况下不能访问这个类中的任何方法。如果他们没有登录,它会将他们重定向回登录页面。在您的视图中,您还可以拥有@auth 和@guest。我用它来显示私人信息的信息,例如私人服务器只能由登录用户看到。

    如果您还有其他问题我可以回答,请告诉我,我很乐意提供帮助!

    https://laravel.com/docs/5.6/authentication

    【讨论】:

      猜你喜欢
      • 2020-05-03
      • 2018-12-15
      • 2021-02-20
      • 2015-04-30
      • 1970-01-01
      • 2018-12-02
      • 1970-01-01
      • 2020-01-31
      • 2015-09-01
      相关资源
      最近更新 更多