How to create a mirror shader?
1. Mirror shader as material with mirror reflection (roughness = 0):

To setup a physically correct material we need to base it on real measured values and setup the nodes so it follows the equations how materials behave (PBR setups). The best source for measured values is refractiveindex.info - we get 2 IOR values: N and K.

IOR is a complex number, most people are familiar with the real part (N), but it has also a complex part (K). For non-conductive materials (dielectrics) the complex part is 0 (or very close to it), so this involves metals mostly.

IOR is also dependent on the wavelength of light, so red, green and blue will reflect differently off of the material. This gives metals their characteristic colors and tinting. To use N and K values in a shader, we'll need the Conductive Fresnel node group, here is a GPU  friendly implementation.

So in refractiveindex.info we input 650nm for red, 550nm for green and 450nm for blue and for example we get physically correct gold mirror shader:

 

It is worth noting that color management also plays significant role how your materials will look. If we enable Filmic and Very High Contrast look we get this, the correct way would be to also setup the lighting for the Filmic color-management (increase light intensities, keep Base Contrast).

Dielectric materials have a diffuse component (unlike metals) and the important part to keep them physically correct is to mix in the reflection through Fresnel. We can also get measured values for IOR, for ceramics it's around 1.8, so here is how a generic setup of mirror reflection on a bathroom tile would look like:



More about this is here: How do I create a reflective white material?

For other materials like wood floor etc. there is just different IOR, the setup is same, unless there is some roughness to the reflection.

For mirror sunglasses shader the effect is made with thin film coating. Measured values for sunglasses are hard to come by, so the artistic approach of mixing shaders through multiple Layer Weight nodes is all there is to it:



There is however an OSL shader available (now also with GPU support) to do the thin-film interference on materials. Use the Thin Film Interference node, don't link the materials, as some of them are not PBR compliant.



2. Mirror shader as a "shader" of mirror object:

Mirror is made from 2 materials: Glass and Silver coated aluminium behind it, so to make physically correct mirror, you will need to model it as such.

It's worth noting that Refractive Caustics option should be turned on to not produce shadow onto the silver plate behind the glass:



For the silver you sample values from refractiveindex.info and you get:



If the mirror is bigger and it's in animation, I suggest putting some slight bump or displacement on it, as nothing is perfectly flat.

For ordinary mirrors made from flute glass and that are not the object of focus this is fine, but fancier mirrors use heavier glass and sides cut in angles so the diffraction of light is clearly visible.

First thing to mention is that Cycles should not be the weapon of choice to render physically correct glass. Bi-directional renderers do much better job at rendering glass with the perfect tool being spectral renderers that can do diffraction and thin-film correctly. With Cycles be ready to set 50k samples and render whole night even on good HW.

Here are some popular glass types and their respective IOR curves. The exact values are again at refractiveindex.info, for the LASF9 it looks like this:



You can notice the glass came to life with color, there is blue tint on edges and warm tint in middle, with diffraction streaks present.

For even more realism we could add a volume absorption shader as that is also not present in Principled or Glass nodes, but on thin glass plane this is only visible on the edges, so I'd say it depends on what type of frame the mirror is in.



This is all correct for roughness = 0, because otherwise we need to account for it. You can find a Fresnel node that takes roughness into account here and use it in place of the standart Fresnel in the right setup, the Glass node in Cycles is equivalent to it:



You can also use the complex IOR node if you need glass that happens to have some small K value.



The test scene is by Robin Marin