Моя цель — передать пользовательский контекст, такой как электронная почта или идентификатор, в Sentry, чтобы я мог видеть, какие пользователи что-то сломали.
Я настроил часть Global Middleware для добавления пользовательского контекста в мои ошибки Sentry. Вот класс:
class AddUserToSentry
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if(Auth::user())
{
//dd(Auth::user()->email);
app('sentry')->user_context(array(
'email' => Auth::user()->email
));
}
return $next($request);
}
}
В моем Handler.php у меня есть:
/**
* Report or log an exception.
*
* This is a great spot to send exceptions to Sentry, Bugsnag, etc.
*
* @param \Exception $e
* @return void
*/
public function report(Exception $e)
{
if ($this->shouldReport($e)) {
app('sentry')->captureException($e);
}
parent::report($e);
}
Чего мне не хватает, чтобы сделать эту работу? Все, что я получаю для пользовательского контекста, это IP-адрес, который не очень полезен в моем случае.
Большое спасибо,
мистифицировать
Вот полный пример, источник это из официальной часовой документации. Чтобы избежать необходимости добавлять use Auth;
Вы можете просто использовать auth()
вспомогательная функция.
namespace App\Http\Middleware;
use Closure;
class SentryContext
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
*
* @return mixed
*/
public function handle($request, Closure $next)
{
if (app()->bound('sentry')) {
/** @var \Raven_Client $sentry */
$sentry = app('sentry');
// Add user context
if (auth()->check()) {
$sentry->user_context(['id' => auth()->user()->id, 'email' => auth()->user()->email]);
}
// Add tags context
// $sentry->tags_context(['foo' => 'bar']);
}
return $next($request);
}
}
Вам необходимо предоставить доступ к Auth Facade Laravel в вашем контроллере следующим образом:
Use Auth;