【问题标题】:auth()->user() returns null after updating userauth()->user() 更新用户后返回 null
【发布时间】:2017-04-08 08:45:56
【问题描述】:

所以我有一个页面,用户可以在其中更新他的用户名、电子邮件、头像,但是我遇到了 auth()->user() 的问题。当用户更新他的用户名或电子邮件或头像时,一切正常并且它会更新但是如果他在更新后尝试再次查看设置,他将收到错误尝试获取非对象的属性但是在我做了dd(auth()->user())之后似乎@ 987654323@ 是 null 并且修复它的唯一方法是手动注销,然后再次更改设置,这变得有点重复。我的代码:

public function edit(Request $request)
{
    $user = auth()->user();
    //If user did change his username or email or both.
    if(!$request->username === $user->username || !$request->email === $user->email)
    {
        $this->validate($request,[
           'username' => 'min:1|unique:users',
           'email' => 'min:1|unique:users|email',
           'avatar' => 'mimes:jpeg,jpg,gif,png'
        ]);
    }
    //Check if user is trying to update his avatar
    if($request->file('avatar'))
    {
        $image = $request->file('avatar');
        $image->store('avatars','s3');
        $name = $image->hashName();
        $src = "https://d1nm0o13p1ms88.cloudfront.net/avatars/$name";
        $user->avatar($src);
    }
    $user->username = $request->username;
    $user->email = $request->email;
    $user->save();
    $old = $request->session()->get('username');
    $request->session()->flush();
    $request->session()->put('username',$request->username);
}

settings.blade.php

{{--this returns the session--}}
{{dd(Session::get('username'))}}
{{--this returns null--}}
{{dd(auth()->user())}}
<div class="settings">
<div class="ui top attached tabular menu">
    <a class="active item">Tab</a>
</div>
<div class="ui bottom attached active tab segment">
    @if (count($errors) > 0)
        <div class="ui error message">
            @foreach ($errors->all() as $error)
            <p>{{$error}}</p>
            @endforeach
        </div>
    @endif
    <form method="POST" action="/settings" enctype="multipart/form-data">
        {{csrf_field()}}
    <div class="ui form">
        <div class="field">
            <label>Username:</label>
            <input type="text" name="username" value="{{auth()->user()->username}}">
        </div>
    </div>
        <div class="ui form" style="margin-top: 20px;">
            <div class="field">
                <label>Email:</label>
                <input type="text" name="email" value="{{auth()->user()->email}}">
            </div>
        </div>
        <div class="ui form" style="margin-top: 20px;">
            <div class="field">
                <label>Avatar:</label>
                <img src="{{auth()->user()->avatar}}" style="width:180px; height:180px;"> <br>
                <input type="file" name="avatar">
            </div>
        </div>
        <input class="ui button" type="submit" value="Save" style="margin-top: 30px;">
    </form>
</div>
</div>

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    这一行

    $request->session()->flush();
    

    正在清除会话及其所有数据。因此,用户被注销。

    你可以这样修复它

    $old = $request->session()->get('username');
    $request->session()->flush();
    $request->session()->put('username',$request->username);
    auth()->login($user);
    

    【讨论】:

      猜你喜欢
      • 2016-05-11
      • 2021-01-02
      • 1970-01-01
      • 2023-02-04
      • 1970-01-01
      • 2016-07-07
      • 2017-03-17
      • 1970-01-01
      • 2020-02-04
      相关资源
      最近更新 更多