The route seems public already. Make sure, there is no authentication checking in the __construct() method in your ProjectsController.
Making a route public for anyone to view
I want to allow a route to be public for anyone who has the URL to view. It is coming from protected routes from the admin. The admin creates the pages and the final page we would send it to a doctor who will also send it to the patients. How can I create a public URL from Route::get('/smiledesign/{project}/doctorfinalform', 'ProjectsController@doctorfinalform');
The view is like this http://blog.test/smiledesign/4/doctorfinalform
Here are my routes
Auth::routes();
// Users Routes
Route::get('/home', 'HomeController@index')->name('home');
Route::get('/smiledesign/create', 'ProjectsController@create');
Route::post('/store', 'ProjectsController@store');
Route::get('/smiledesign/{project}/show', 'ProjectsController@show');
Route::get('/smiledesign/success', 'ProjectsController@success');
Route::get('/smiledesign/cases', 'ProjectsController@cases');
// Doctor final form
Route::get('/smiledesign/{project}/doctorfinalform', 'ProjectsController@doctorfinalform');
// Admin redirect to dashboard
Route::get('/admin', 'HomeController@admin')->middleware('admin');
// Admin Routes
Route::middleware('forStaff')->group(function () {
Route::get('/smiledesign/adminforms', 'ProjectsController@adminforms');
Route::get('/smiledesign/{project}/records', 'ProjectsController@records');
Route::patch('/smiledesign/{project}', 'ProjectsController@update');
Route::get('/smiledesign/{project}/edit', 'ProjectsController@edit');
Route::delete('/smiledesign/{project}', 'ProjectsController@destroy');
Route::get('/smiledesign/{project}/userproject', 'ProjectsController@userproject');
Route::get('/smiledesign/published', 'ProjectsController@published');
});
// Published page
public function published(project $project){
$project = Project::where('user_id', auth()->id())->find(session('created_id'));
return view ('/smiledesign.published', compact('project'));
}
public function doctorfinalform(Project $project, request $request){
return view('smiledesign.doctorfinalform', compact('project'));
}
Is the doctor the user?
Don't mess with middleware. There are better methods using Authorization https://laravel.com/docs/5.8/authorization
But to do simply, in your controller;
public function published(project $project)
{
abort_if(! $project->user_id == auth()->id(), 403);
return view ('/smiledesign.published', compact('project'));
}
Please or to participate in this conversation.