2017-04-07 15 views
0

だから私はユーザーが自分のユーザー名、電子メール、アバターを更新できるページを持っていますが、auth()->user()で問題が発生しています。ユーザーが彼のユーザー名や電子メール、またはアバターを更新すると、すべてが正常になり、更新後に設定を再度表示しようとすると更新されますが、dd(auth()->user())の後には、非オブジェクトのプロパティを取得しようとするとエラーが発生します。auth()->user()nullそれを修正する唯一の方法は、手動でログアウトして設定を再度変更することです。これは繰り返しの一種になります。私のコード:ユーザーを更新した後にauth() - > user()が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> 

答えて

2

このライン

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

がセッションをクリアし、すべてのデータです。したがって、ユーザーはログアウトされます。

あなたはこの

$old = $request->session()->get('username'); 
$request->session()->flush(); 
$request->session()->put('username',$request->username); 
auth()->login($user); 
のようにそれを修正することができます
関連する問題